认证和记住我的区别
subject.isAuthenticated()
,表示用户进行了身份验证登录的,即使用subject.login
进行了登录。subject.isRemebered()
,表示用户是通过记住我登录的,此时可能并不是真正的你(如你的朋友使用你的电脑,或者你的cookie被窃取)在访问的。- 两者二选一,即
subject.isAuthenticated()==true
,则subject.isRemembered()==false
,反之一样,两个状态只能选一个。
建议
- 访问一般网页,如个人在主页之类的,我们使用
user
拦截器即可,user拦截器只要用户登录。(isRemembered() || isAuthenticated())
过即可访问成功。 - 访问特殊网页,如我的订单,提交订单页面,我们使用
authc
拦截器即可,authc拦截器会判断用户是否是通过Subject.login(isAuthenticated()==true)
登录的,如果是才放行,否则会跳转到登录页面叫你重新登录。
测试
(1)打开浏览器,登录,访问list.jsp成功,访问admin.jsp成功。
(2)关闭浏览器。
(3)打开浏览器,访问list.jsp成功,访问admin.jsp失败,跳转至登录界面。
RememberMeManager
RememberMe通过这个Bean进行管理,其中有一些可配置的参数。
例如:
<bean id="securityManager"
class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="cacheManager" ref="cacheManager" />
<property name="authenticator" ref="authenticator"></property>
<property name="realms">
<list>
<ref bean="jdbcRealm"></ref>
<ref bean="secondRealm"></ref>
</list>
</property>
<property name="rememberMeManager.cookie.maxAge" value="10">
</property>
最后一行设置了Cookie的最长有效期,10秒后Cookie失效,即需要重新登录。