RememberMe
一、RememberMe是什么
- 这个就是你访问一些网站的时候,下次再打开浏览器还是能记住你是谁,无需登录就可以访问一些页面
- 基本就是通过将相关的 cookie 写到浏览器端保存下来实现的
- 使用了这个功能能够不受限制访问部分的界面,但是涉及到金融相关的页面,比如订单页面还是需要再次认证的
- RememberMe使用过程中,需要配合相应的拦截器来实现相应的功能,用错了拦截器可能就不能满足你的需求了
二、RM配置
1、spring-shiro-web.xml配置
配置会话 cookie 模版
- 这里 sid 的值为 -1意思关闭浏览器的话就会被自动删除,没有办法保持会话
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="sid"/>
<property name="httpOnly" value="true"/>
<property name="maxAge" value="-1"/>
</bean>
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="rememberMe"/>
<property name="httpOnly" value="true"/>
<property name="maxAge" value="2592000"/>
</bean>
配置remenbeMe管理器
<bean id="rememberMeManager"
class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cipherKey" value="
#{T(org.apache.shiro.codec.Base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/>
<property name="cookie" ref="rememberMeCookie"/>
</bean>
配置安全管理器
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="rememberMeManager" ref="rememberMeManager"/>
.........
</bean>
配置表单拦截器
<bean id="formAuthenticationFilter"
class="org.apache.shiro.web.filter.authc.FormAuthenticationFilter">
<property name="rememberMeParam" value="rememberMe"/>
........
</bean>
配置shiroFilter
- 在没有登录过或者记住过的话,访问任何界面都会被跳转至登录页面
- 登录勾选记住我后,关闭浏览器再进行访问由 user 控制的界面无需再次登录
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
........
<property name="filterChainDefinitions">
<value>
/login.jsp = authc
/logout = logout
/authenticated.jsp = authc
/** = user
</value>
</property>
</bean>
SSL
一、生成数字证书
- 使用JDK的keytool命令,生成证书(包含证书/公钥/私钥)到D:\localhost.keystore:
keytool -genkey -keystore "D:\localhost.keystore" -alias localhost -keyalg RSA
- 生成过程中的姓名组织等等一路填写下去即可
二、配置 tomcat server xml
- 我使用的是 tomcat9,原来的相关的配置项本来就是注释掉的,所以直接加入如下的配置即可
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\localhost.keystore" keystorePass="123456"/>
三、添加SSL到配置文件
- shiro 的spring 配置文件里面加上 ssl 的拦截器并在 shiroFilter 里面配置使用
<bean id="sslFilter" class="org.apache.shiro.web.filter.authz.SslFilter">
<property name="port" value="8443"/>
</bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/login.jsp"/>
<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
<property name="filters">
<util:map>
<entry key="authc" value-ref="formAuthenticationFilter"/>
<entry key="ssl" value-ref="sslFilter"/>
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
/login.jsp = ssl,authc
/logout = logout
/authenticated.jsp = authc
/** = user
</value>
</property>
</bean>
四、测试
- https://localhost:8443/proname/login.jsp 即可访问登录的页面,proname 是自己的项目的名称
单点登录
- 直接参考博客:https://www.iteye.com/blog/jinnianshilongnian-2036730
综合示例