shiro不执行认证的解决办法
来源:互联网 发布:淘宝账号查别人的信息 编辑:程序博客网 时间:2024/06/10 11:11
初次使用shiro,定义好了realm却发现程序并不进去执行,很是郁闷。这一问题前后出现了两次,而且原因各不相同。下面把觖办法记录下来。
第一种是因为spring的配置文件 中FormAuthenticationFilter过滤器的loginUrl没有与shiroFilter下filterChainDefinitions对应起来,这也是很常见的错误。
第二种错误非常另类,没有进入realm是因为请求方法不对,通过对源码的跟踪,我定位到了FormAuthenticationFilter的onAccessDenied方法:
/** * 当认证失败时调用 */@Overrideprotected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {if (isLoginRequest(request, response)) {if (isLoginSubmission(request, response)) {if (log.isTraceEnabled()) {log.trace("- submission detected. Attempting to execute login.");}return executeLogin(request, response);} else {if (log.isTraceEnabled()) {log.trace("Login page view.");}// allow them to see the login page ;)return true;} } else {if (log.isTraceEnabled()) {log.trace("Attempting to access a path which requires authentication. Forwarding to the "+ "Authentication url [" + getLoginUrl() + "]");}// saveRequestAndRedirectToLogin(request, response);// 响应信息改为jsonresponse.setContentType(MediaType.APPLICATION_JSON_VALUE); // 设置ContentType// ,返回json数据response.setCharacterEncoding("UTF-8"); // 避免乱码try { // {"code":"1","message":"成功","data":"null"}response.getWriter().write("{\"code\":\"0\",\"message\":\"拒绝访问\"}");} catch (IOException e) {System.out.println("返回json出错:" + e.getMessage());e.printStackTrace();}return false;}}
shiro会调用isLoginRequest来判断当前请求是不是 登录请求,返回的是true,但是最终的判决是由isLoginSubmission方法决定,不知道它是干嘛的,点开看看:
protected boolean isLoginSubmission(ServletRequest request, ServletResponse response) { return (request instanceof HttpServletRequest) && WebUtils.toHttp(request).getMethod().equalsIgnoreCase(POST_METHOD); }
原来是用来判断当前请求的方法是不是POST,而我用的是GET,难怪!!
0 0
- shiro不执行认证的解决办法
- shiro认证的过程
- shiro认证的流程
- Shiro 的身份认证
- Shiro入门5:Shiro认证的HelloWorld
- shiro与spring整合详解与spring项目中shiro注解不生效的解决办法
- Shiro身份认证的流程
- shiro关于认证的学习
- shiro 认证filter 的原理
- shiro的认证代码实现
- Shiro 的身份认证-Realm
- shiro框架的认证功能
- ie不执行javascript的解决办法
- response.write()不执行的解决办法
- __autoload()不执行的解决办法spl_autoload_register();
- TextureView onSurfaceTextureAvailable不执行的解决办法
- Shiro进认证不进授权的情况之一及解决方法
- crontab 不执行解决办法
- Codeforces 776B & 776C 程序(夏洛克专场)
- Chrome的一些监控方法
- oracle 查询指定时刻的数据
- vue2.0-1-概述与安装
- android中数据的分包
- shiro不执行认证的解决办法
- linux学习笔记(十二)
- hdu 1250 Hat's Fibonacci(大数)
- 原创翻译 | 2017年大数据新手入门指南
- Gitlab和Sourcetree结合使用实现代码管理
- iOS UICollectionViewCell一些小坑
- Problem P-16 Fatmouse trade
- Android Sqlite Cursor遍历数据失败
- UVA 725 Divsion(暴力枚举)