java中shiro记住密码_java shiro配置记住密码功能 RememberMe

2019独角兽企业重金招聘Python工程师标准>>>

6936d1565ae689371725cdb5fc51c415.png

一般来讲,记住密码的基本处理,就是把用户的一些基本信息(密码)存入浏览器的Cookie,下次登录的时候优先验证Cookie,后端做处理;以此来实现记住密码的功能!使用shiro自带的RememberMe功能,使用起来比较简单,只需简单的配置。

需注意一点的是,网站如果对安全性要求比较高的,一般都不建议有记住密码的功能! 因为Cookie是保存在本机电脑浏览器里,不排除其他用户能使用此电脑,拷走Cookie,导入其他电脑继续使用您的账号登录!

具体操作程序:

spring-shiro-web.xml配置

RememberMe 配置与rememberMe管理器

rememberMeCookie:即记住我的Cookie,保存时长7天;rememberMe管理器,cipherKey是加密rememberMe Cookie的密钥;默认AES算法;

……

/login.jsp = authc

/logout = logout

/authenticated.jsp = authc

/** = user

设置securityManager安全管理器的rememberMeManager;

“/authenticated.jsp = authc”表示访问该地址用户必须身份验证通过(Subject. isAuthenticated()==true);而“/** = user”表示访问该地址的用户是身份验证通过或RememberMe登录的都可以。

关于更多shiro过滤器的信息请参考:http://blog.csdn.net/hxpjava1/article/details/7035724

LoginAuthRealm.java

// 认证信息

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {

try {

UsernamePasswordToken token = (UsernamePasswordToken) authcToken;

String username = token.getUsername();

SysUsers user = userSv.getByName(token.getUsername());

if (!StringUtils.isBlank(username)) {

if (user != null) {

return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());

}

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

注:return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());其中把用户信息放入SimpleAuthenticationInfo对象,不能把整个user对象放入,不然会出现错误数组下标越界,在项目中user对象信息过于庞大,不能全部存入Cookie,Cookie对长度有一定的限制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shiro的remember me功能可以在用户登录后,保存用户的身份信息到cookie,这样当用户再次访问网站时,就可以通过cookie自动登录,而无需再次输入用户名和密码。下面是使用Shiroremember me功能Java代码示例: 1. 配置Shiro的remember me功能Shiro配置文件,需要配置remember me功能,如下所示: ``` <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myRealm"/> <property name="rememberMeManager" ref="rememberMeManager"/> </bean> <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager"> <property name="cookie" ref="rememberMeCookie"/> </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"/> <!-- 30 days --> </bean> ``` 这里配置了CookieRememberMeManager来管理remember me功能,同时指定了cookie的名称为“rememberMe”,并设置cookie的httpOnly属性为true,表示只能通过HTTP访问该cookie。另外,设置了cookie的最大有效期为30天。 2. 在登录时记住用户身份信息 在用户登录成功后,可以通过remember me功能将用户的身份信息保存到cookie,如下所示: ``` Subject currentUser = SecurityUtils.getSubject(); if (currentUser.isRemembered()) { // 如果用户已经通过remember me功能自动登录,则无需再次验证 } else { // 如果用户没有通过remember me功能自动登录,则需要验证用户名和密码 UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 设置remember me功能 token.setRememberMe(true); currentUser.login(token); } ``` 在这里,如果用户已经通过remember me功能自动登录,则无需再次验证用户名和密码;否则,需要通过UsernamePasswordToken来验证用户名和密码,并设置remember me功能为true。最后,调用currentUser.login(token)方法来进行登录。 3. 在访问时自动登录 当用户再次访问网站时,可以通过cookie来自动登录,如下所示: ``` Subject currentUser = SecurityUtils.getSubject(); if (currentUser.isAuthenticated()) { // 如果用户已经通过验证,则直接访问 } else { // 如果用户没有通过验证,则尝试使用remember me功能自动登录 Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("rememberMe")) { String rememberMe = cookie.getValue(); UsernamePasswordToken token = new UsernamePasswordToken("", "", true); token.setRememberMe(true); currentUser.login(token); break; } } } } ``` 在这里,如果用户已经通过验证,则直接访问;否则,尝试使用remember me功能自动登录。首先,获取所有的cookie,然后遍历所有的cookie,找到名称为“rememberMe”的cookie,获取cookie的值,通过UsernamePasswordToken来自动登录。最后,调用currentUser.login(token)方法来进行自动登录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值