本人主要说明,在使用shiro filter认证登录时(Authentication)将
subject.login(token);
放在在filter时的用法,源码一
类 AccessControlFilter 中控制访问可以得到,public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue); }
以上得知 如果 || 得知如果第一个false 继续执行 第二个 如果第一个true则返回true。查看isAccessAllowed(request, response, mappedValue) 得知默认实现来自
类AuthenticationFilter 相关代码, protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { Subject subject = getSubject(request, response); return subject.isAuthenticated(); }

在使用Shiro的FormAuthenticationFilter进行用户登录验证时,如果一个已登录用户A未登出,然后通过浏览器回退按钮回到登录页面并尝试用用户B登录,过滤器不会执行。这是因为当`isAuthenticated()`为true时,`onAccessDenied()`方法不会执行。解决方法是重写`isAccessAllowed()`方法,通过`isLoginSubmission()`判断是否为登录提交,确保过滤器生效。
最低0.47元/天 解锁文章
1014

被折叠的 条评论
为什么被折叠?



