文档章节

java shiro配置记住密码功能 RememberMe

Jesons
 Jesons
发布于 2014/08/27 11:51
字数 592
阅读 1623
收藏 1

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

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

具体操作程序:

spring-shiro-web.xml配置

RememberMe 配置与rememberMe管理器

<!-- remenberMe配置 -->
   <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
       <constructor-arg value="rememberMe" />
       <property name="httpOnly" value="true" />
       <!-- 默认记住7天(单位:秒) -->
       <property name="maxAge" value="604800" />
   </bean>
   <!-- rememberMe管理器 --> 
   <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>

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

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="rememberMeManager" ref="rememberMeManager" />
    </bean>
<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>



设置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对长度有一定的限制






© 著作权归作者所有

Jesons
粉丝 33
博文 56
码字总数 47373
作品 0
江北
程序员
私信 提问
Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

问题 shiro中提供了rememberMe功能,它用起来是这样的 [java] view plaincopy UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPassword())......

Jerry-
2015/05/27
0
2
SSM框架整合Shiro后的开发

手摸手教你SSM框架整合Shiro后的开发 前面,我们学习了Shiro实现权限管理之表结构设计以及JQuery-Ztree.js使用范例 ,接下来就详细介绍一下SSM框架整合Shiro框架后的开发。同样推荐大家参看张...

TyCoding
2018/09/19
0
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
2018/10/22
0
0
go语言中实现类似ThreadLocal的功能

周末没事,打算试试用go语言实现一个shiro,简单化,api尽量保持一致 遇到一个问题,在shiro中SecurityUtils.getSubject();得到的subject是与当前线程中绑定的,在java中是使用ThreadLocal绑...

itwarcraft
2015/01/18
471
2
第十三章 RememberMe——《跟我学Shiro》

目录贴: 跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下...

Zero零_度
2016/03/21
33
0

没有更多内容

加载失败,请刷新页面

加载更多

Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
多线程同时加载缓存实现

import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorServi......

暗中观察
昨天
3
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
2
0
组装一台工作游戏两用机

一、配置清单如下: 分类 项目 价格(元) 主板 华硕(ASUS)TUF Z370-PLUS GAMING II 电竞特工 Z370二代 支持9代CPU 1049 CPU 英特尔(Intel) i7 8700K 酷睿六核 盒装CPU处理器 2640 风扇 九...

mbzhong
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部