前天学习shiro的时候,学着学着突然发现和spring集成的时候不能进入自定义realm了,查了两天也没找到原因,后来加了一位大神,帮我解决了这个问题,在这里非常感谢。
问题如下:
需求是:登录我写的网站的任何一个url都会默认跳到用户登录页面,
当我打开服务器,输入url,确实进入登录页面,然而当我输入正确的账号密码的时候还是依旧在登录页面。
这就奇怪了,我赶紧去看看教程的配置,没毛病啊,我又去百度了一下配置,也没毛病,而且还发现很多人有我这样的问题(在这里鄙视一下发问题的楼主,自己说完问题解决了,也不告诉其他人)。纠结两天之后加了一位大神的QQ,给我解决了这个问题,在此发篇文章,希望能解决后来者的问题。
这个问题的原因是shrio的配置文件有问题
首先
<property name="securityManager" ref="securityManager" /> <!-- loginUrl认证提交地址,如果没有认证将会请求此地址进行认证,请求此地址江油formAuthenticationFilter进行拦截表单认证--> <property name="loginUrl" value="/login.action"/> <!--认证成功统一跳转到first.action,建议不配置--> <property name="successUrl" value="/index.action"/> <!--通过unauthorizedUrl指定没有权限操作时跳转页面--> <property name="unauthorizedUrl" value="/refuse.jsp"/>这3个value值最好都用具体的动作,不要用jsp页面,因为这主要起跳转作用。
最重要的是下面的拦截链!!!!:
原来我写的是这样的
<property name="filterChainDefinitions"> <value> <!-- /所有的url都要登录--> /**= authc </value> </property>
后来经过高人指点发现我这样把所有的url都拦截了,包括jsp页面,这样我每次做登录请求的时候,首先拦截的是jsp页面(根本不会拦截到登录请求,怎么可能进入realm呢),发现需要跳转登录页面,然后就陷入死循环。
修改后!!!:
<property name="filterChainDefinitions"> <value> <!-- /所有的url都要登录--> /login.jsp =anon /login.action=authc /** =authc </value> </property>这样配置 就放过了login.jsp页面的拦截,只拦截请求动作,这样就不会陷入死循环,果然进入了自定义的realm。
看到成功了,我差点给大神跪下。超级超级感谢大神!!不知道他csdn叫什么名字