<p>很多第一次使用shiro做demo的同学经常问我 为什么我提交的登录表单为什么没有拦截到,其实是因为他们没有对login拦截</p><p>将拦击链设置如下即可:</p>
<!-- Shiro Filter -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login" />
<property name="successUrl" value="/" />
<property name="filterChainDefinitions">
<value>
/login = authc
/logout = logout
/static/** = anon
/api/** = anon
/register/** = anon
/admin/** = roles[admin]
/** = user
</value>
</property>
</bean>
/login = authc 当这个拦截器错用的时候就会进入shiro的框架系统。
authc对应的反射类为 org.apache.shiro.web.filter.authc.FormAuthenticationFilter
即表单拦截器, 它的父类中有一个executeLogin方法里面有subject.login(token)方法。这样程序 就进入了下图流程。
此图的过程如下,subject.login(token)后,shiro的主要管理者 Security Manager接管,它委托给Authenticater进行认证,Authenticater会将token传给realm,realm会将token信息与数据库中的信息进行对比,如果有对不上的 就是认证成功。