`
rguess
  • 浏览: 70234 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

shiro在remember me状态下登录,自定义session失效解决方法

阅读更多
使用shiro的时候,当我们使用remember me功能登录系统的时候,我们在用户登录自定义的session已经失效,这样就会影响系统正常运行;对于这种情况,我的解决方案是在shiro中自定义一个filter检测自定义的session是否失效,如果失效就读取数据加入到session中

shiro 配置文件:
<!-- 自定义加入filter,起在remember me session失效情况下刷新session作用 -->
<bean id="userSettingFilter" class="org.guess.security.filter.UserSetting" />


在shiroFilter中加入该filter
<property name="filters">
   <util:map>
      <entry key="userSetting" value-ref="userSettingFilter"/>
   </util:map>
</property>


filter类代码:
public class UserSetting extends AccessControlFilter {
	
	@Autowired
	private UserService userService;
	
	@Override
    protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
        Subject subject = getSubject(request, response);
        if (subject == null) {
            return false;
        }
        HttpSession session = ((HttpServletRequest)request).getSession();
        User current_user = (User) session.getAttribute(Constants.CURRENT_USER);
		Object recs = session.getAttribute(Constants.USER_MENUS);
        //判断session是否失效,若失效刷新之
        if(current_user == null || recs == null){
        	String username = (String) subject.getPrincipal();
        	User user = userService.findByLoginId(username);
        	session.setAttribute(Constants.CURRENT_USER, user);
        	session.setAttribute(Constants.USER_MENUS, user.getMenus());
        }
        return true;
    }

	@Override
	protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
			throws Exception {
		return true;
	}

	@Override
	protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
		return true;
	}

}


求大师指导更好的解决方法
1
2
分享到:
评论
2 楼 sbwfgihc 2015-12-28  
有人解决了类似的问题吗
1 楼 u011202188 2015-04-27  
你这session是HttpSession啊,不是shiro的Session...

相关推荐

    跟我学Shiro第13章Demo(RememberMe)

    1. **RememberMe服务**:RememberMe服务是Shiro提供的一个组件,用于在用户登录时记住他们的身份,以便在未来访问时自动恢复登录状态。这个服务依赖于特定的RememberMe Manager,如基于Cookie的实现。 2. **...

    CVE-2016-4437 Shiro550 & Shiro721 RememberMe Padding Oracle 漏洞利用

    CVE-2016-4437 Shiro550 & Shiro721 RememberMe Padding Oracle Shiro721 RememberMe Padding Oracle影响版本: - Apache Shiro 1.2.5,1.2.6,1.3.0,1.3.1,1.3.2,1.4.0-RC2,1.4.0,1.4.1 CVE-2016-4437 ...

    shiro获取登录状态和用户信息

    ### Shiro 获取登录状态与用户信息 在Java Web开发领域,Apache Shiro 是一个非常流行的权限管理框架。它提供了一套完整的认证、授权、加密和会话管理功能。本篇文章将详细介绍如何通过Shiro框架来获取用户的登录...

    springboot +shiro+redis实现session共享(方案二)1

    本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 在实现 session 共享之前,需要在项目中引入相关依赖项,包括: * ...

    shiro redis session共享

    在默认情况下,Shiro将session信息存储在内存中,但这种方式在分布式环境中并不适用,因为每个服务器实例都有自己的session存储,无法共享。通过集成Redis,我们可以将session数据存储在Redis这个中心化的存储系统中...

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...

    nginx+tomcat shiro实现多tomcat下session共享

    在这种情况下,如何实现用户登录状态(即session)在多个服务器间的共享就成为一个重要的问题。"nginx+tomcat shiro实现多tomcat下session共享"这一主题,就是探讨在这样的架构中,如何有效管理和共享session。 1. ...

    shiro+spring+data+session+redis实现单点登录

    在IT行业中,单点登录(Single Sign-On,简称SSO)是一种常见的身份验证机制,它允许用户在一个系统中登录后,无需再次输入凭证即可访问其他相互信任的系统。本案例聚焦于使用Apache Shiro、Spring、Spring Data以及...

    shiro+redis做session管理

    在IT行业中,Session管理是Web应用中的重要环节,它用于维护用户登录状态,确保用户在不同请求间的数据一致性。在大型分布式系统中,由于多台服务器之间无法共享内存,传统的Session管理方式不再适用。这时,我们...

    SSM项目集成shiro搭建session共享

    7. **Shiro-Redis**:Shiro-Redis2.9是Shiro的一个扩展,它将session数据存储在Redis缓存中,解决了在分布式环境下的session共享问题。Redis是一个高性能的键值数据库,具有丰富的数据结构支持,适合存储session这样...

    shiro+redis session共享实现

    首先,Shiro框架的Session管理是基于内存的,这意味着默认情况下,每个Web服务器都会独立维护其自身的session数据。但在分布式环境中,用户可能会在多个服务器之间跳转,这就需要一个统一的session存储机制,以便...

    shiro-单用户登录.zip

    - Shiro的Remember Me功能允许用户在登录时选择记住我,以便在下次访问时自动登录。这涉及到对用户凭据的加密存储,通常使用Cookie实现。 8. **异常处理** - Shiro抛出的异常如UnauthorizedException(无权访问)...

    shiro实现单点登录

    在Spring框架基础上整合Shiro、Spring Data Redis以及Spring Session Data Redis,可以构建一个高效、可靠的分布式SSO解决方案。 首先,理解Shiro的核心组件: 1. **Subject**:代表当前的用户,是Shiro框架的主要...

    shiro-redisson基于Redis的ShiroCache和Session实现

    总之,`shiro-redisson` 为 Shiro 带来了分布式环境下的高效缓存和会话管理,通过利用 Redis 的特性,解决了在大型分布式系统中的安全性和性能挑战。对于需要构建可扩展、高可用的 Java 应用来说,这是一个非常有...

    SpringBoot 、Shiro、 自定义注解权限控制源码下载

    例如,通过Shiro的自定义注解,可以在方法级别进行权限判断,确保只有具有特定权限的用户才能执行特定的操作。这在描述中提到的"自定义注解权限控制"就是指这一功能。 MyBatis Plus则是在MyBatis的基础上扩展的一套...

    shiro 新手鼓捣了一天终于搞好了。。还差个分布式session

    - **会话管理**:跟踪用户的会话状态,如登录时间、在线状态等。 2. **Shiro 与 SpringMVC 集成** - **Spring Bean 注入**:Shiro 的组件可以通过 Spring 进行管理,实现 DI(依赖注入)。 - **Web 应用配置**:...

    SSH+shiro+tiles登录示例

    在Action中,我们可以使用Shiro的`SecurityUtils`类获取Subject对象,然后调用`subject.login()`方法尝试登录。Shiro会自动与我们在配置文件中定义的认证机制进行交互,比如使用`AuthorizingRealm`进行数据库查询...

    基于spring redis的shiro session共享

    shiro 框架没有用tomcat的session,而是重新实现了一套。所以系统一旦引入shiro后,采用传统的tomcat session共享机制是无效的,必须采用面向shiro 的session共享。 网上针对“shiro session共享”的文章比较多,...

    springboot+redis+shiro单点登录,统一异常处理,统一日志

    在SSO场景下,Shiro负责用户的权限管理和登录状态维护。通过Shiro的Filter链,我们可以定制登录逻辑,实现用户在各个子系统间的身份共享。 接下来,我们详细讨论如何实现这些功能: 1. **SSO实现**: - 创建一个...

Global site tag (gtag.js) - Google Analytics