一、简介
ssm web 中记住用户信息可在下次用户访问时直接访问相关数据。web 中记住用户信息时使用Cookie 技术实现记住用户相关信息。
二、创建Maven Web 工程
本项目基于Shiro 之缓存 修改实现。
1.application.xml 修改为如下:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="loginUrl" value="/login" />
<property name="securityManager" ref="securityManager" />
<property name="filterChainDefinitions">
<value>
/test=authc
/login=authc
/rememberMe=user
</value>
</property>
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="user_realm" />
<property name="cacheManager" ref="cacheManager" />
<property name="rememberMeManager" ref="rememberMeManager"/>
</bean>
<!-- 配置记住我 -->
<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
</bean>
/rememberMe=user 配置表示 /rememberMe 请求使用Shiro 的 user 过滤器处理,user 过滤器表示用户登录认证 / 记住用户登录信息的请求将被放行。
CookieRememberMeManager 使用Cookie 记录的认证信息就是自定义Realm 类doGetAuthenticationInfo 方法中SimpleAuthenticationInfo 的 principal 对象。
2.login.jsp 怎加记住复选框:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div id="app">
<form action="login" method="post">
<input name="username" placeholder="请输入用户名" /><br/>
<input name="password" placeholder="请输入密码" /><br/>
<input name="rememberMe" type="checkbox" />记住我<br/>
<button type="submit">提交</button>
</form>
</div>
</body>
</html>
3.User.java 实体类必须实现Serializable接口
4.LoginController.java 添加 /rememberMe:
@RequestMapping("/rememberMe")
@ResponseBody
public Object rememberMe() {
Subject subject = SecurityUtils.getSubject();
return subject.getPrincipal();
}
请求返回当前登录用户的 principal 信息,用户关闭浏览器后再次访问该请求也将返回该 principal 信息。该principal 是自定义Realm 认证方法 返回对象 SimpleAuthenticationInfo 的 principal。
四、测试
1.访问 /rememberMe 请求并登录:

成功返回当前登录的用户认证信息,且浏览器Cookie 中已经包好有用户认证信息的字符串表示。
五、总结
1.SecurityManager 中还可以配置sessionManager,用户将可以在相关请求方法中使用
Subject subject = SecurityUtils.getSubject();
获取Subject ,再通过Subject 获取Session。
2.自定义Realm 认证方法的 SimpleAuthenticationInfo 的 principal 必须实现Serializable 接口,否则浏览器将看不到 principal 的Cookie 保存,也不会抛出相关异常信息。
本文介绍了如何在SSM Web应用中利用Shiro的rememberMe功能来实现用户信息的记住,详细讲解了创建Maven Web工程、配置application.xml、添加登录页面复选框、实体类序列化以及LoginController的相关处理。测试结果显示,当用户登录并选择记住我后,即使关闭浏览器,再次访问时仍能获取到认证信息。同时,文章还提及了Shiro的session管理,指出principal必须实现Serializable接口的重要性。
1万+

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



