`

org.apache.shiro.session.UnknownSessionException

阅读更多
问题说明:
  • 背景:系统登录,原允许用户名、手机号码、邮箱三者之一加密码进行登录,故在注册时严格限制注册用户名不能以数字开头,避免用户名与手机号码区分不开,即造成从数据库读取数据时出错的问题
  • 问题:刚刚接手,不了解之前的业务逻辑以及注册限制,且现在取消了手机号码以及邮箱登陆,导致用一串数字注册用户名时没有进行限制,注册成功了,但登录时报错




原因:
  • 用户名为一串数字,调用底层接口根据用户查询相应用户信息时误将其作为手机号码进行查询,结果为空,抛出异常
  • 根据新的业务逻辑,此处不仅仅是登陆逻辑,而要判断账号所关联的商户的审核状态,故若用户登录后,依然要判断其审核状态,若不符合登陆要求,强制其推出登录


处理过程:
1.session过期时间太短,导致session过期找不到session报错,

这里org.apache.shiro.web.session.mgt.DefaultWebSessionManager设置session时间
globalSessionTimeout时间太短 这个单位是毫秒,建议设置长点时间

2.时间修改长后,还是报错,但是可以执行  SecurityUtils.getSubject().logout();程序执行到return "index";报错

logout可以安全正确退出,session也可以删除,授权信息,认证信息也会被清除(debug进去可以看到的)

但是如果直接return就会报错

3.DEBUG方式

org.apache.shiro.session.UnknownSessionException: There is no session with id
debug进去发现,直接return程序还是会查找你刚才logout的sessionId,因为logout了,当然是找不到session了,理所当然报错

解决方法:

1.修改查询账户信息接口

兼容用户名为数字时的情况

注:公共调用接口,不可改动太大,尽量兼容,避免其他调用接口的位置报错

2.解决报错问题

将原有跳转页面处理改为跳转redirect

@Result(name = ERROR, params = {"flag", "${flag}"}, type = ResultTypeConstants.REDIRECT, location = "/loginpage.do")


其中:flag为原有页面中登陆错误信息标志位

参考文献:http://www.360doc.com/content/14/0730/14/11298474_398125873.shtml#
  • 大小: 296.9 KB
分享到:
评论

相关推荐

    shiro-crypto-hash-1.4.0-API文档-中文版.zip

    Maven坐标:org.apache.shiro:shiro-crypto-hash:1.4.0; 标签:apache、shiro、crypto、hash、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性...

    Apache Shiro核心jar包:shiro-core-1.3.2

    Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

    shiro-cache-1.4.0-API文档-中英对照版.zip

    Maven坐标:org.apache.shiro:shiro-cache:1.4.0; 标签:apache、shiro、cache、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,...

    shiro jar包及源码下载

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。Shiro适用于各种应用,从小型独立应用到大型分布式系统,都能有效地支持。 在"shiro-...

    jedis-3.3.0.jar

    at org.apache.shiro.session.mgt.eis.CachingSessionDAO.getActiveSessions(CachingSessionDAO.java:345) at com.ehr.security.shiro.SystemAuthorizingRealm.doGetAuthenticationInfo(SystemAuthorizingRealm....

    shiro-all jar

    6. **org.apache.shiro.session**: 会话管理模块,负责用户的会话状态维护,可以跨应用和服务器集群共享会话信息。 7. **org.apache.shiro.subject**: Shiro的核心概念,代表当前操作的主体(如用户),包括其认证...

    shiro连接redis集群 根据org.crazycake.shiro包改造源码

    org.crazycake.shiro包是对Apache Shiro的扩展,提供了Redis的集成方案。这个改造后的源码很可能是对org.crazycake.shiro中的`RedisSessionDAO`、`RedisCacheManager`等组件进行了优化,以适应Redis集群的需求。例如...

    shiro-crypto-hash-1.4.0-API文档-中英对照版.zip

    Maven坐标:org.apache.shiro:shiro-crypto-hash:1.4.0; 标签:apache、shiro、crypto、hash、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    安全认证框架-Apache_Shiro研究心得

    <bean class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <property name="globalSessionTimeout" value="1800000"/> <property name="sessionMode" value="native"/> <!-- 或 http -->...

    shiro所有jar包

    <groupId>org.apache.shiro <artifactId>shiro-spring <version>1.7.1 <groupId>org.apache.shiro <artifactId>shiro-core <version>1.7.1 <!-- 其他相关依赖 --> ``` 总之,Apache Shiro是一个强大且灵活...

    shiro1.7.1.zip

    Apache Shiro 是一个强大且易用的Java安全框架,提供了身份认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。标题中的"shiro1.7.1.zip"表明这是一个包含Apache Shiro 1.7.1版本所有核心模块的压缩包,...

    shiro 1.4.0所有jar包(全)

    Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

    Apache shiro 1.13.0源码

    在 web 应用中,可以通过配置 `shiro.ini` 或者 `Web.xml` 来定制过滤器。 6. **Caching**:Shiro 支持缓存管理,可以缓存认证和授权信息,提高性能。 7. **Testing**:源码中包含了测试用例,帮助开发者理解和...

    shiro.freemarker.ShiroTags已打包

    `com.jagregory.shiro.freemarker.ShiroTags` 是 Jagregory 开发的一个扩展,将 Apache Shiro 的安全功能与 Freemarker 模板引擎相结合。这个类库提供了一系列的 Freemarker 标签,允许开发者在 Freemarker 模板中...

    org.apache.aries.jax.rs.shiro.authz-1.1.0.pom

    Aries项目正在提供一组可插入的Java组件,以支持企业OSGi应用程序编程模型。 这包括由OSGi联盟企业专家组(EEG)定义的以应用程序为中心的规范的实现和扩展,以及用于多捆绑应用程序的组装格式,以便将其部署到各种...

    java head space.txt

    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at ...

    shiro-jar.zip

    shiro-all-1.7.1.jar,shiro-aspectj-1.7.1.jar,shiro-cache-1.7.1.jar,shiro-config-core-1.7.1.jar,shiro-config-ogdl-1.7.1.jar,shiro-core-1.7.1.jar,shiro-crypto-cipher-1.7.1.jar,shiro-crypto-core-1.7.1.jar...

    org.apache.aries.jax.rs.shiro.authz-1.1.0.jar

    Aries项目正在提供一组可插入的Java组件,以支持企业OSGi应用程序编程模型。 这包括由OSGi联盟企业专家组(EEG)定义的以应用程序为中心的规范的实现和扩展,以及用于多捆绑应用程序的组装格式,以便将其部署到各种...

    shiro-web-1.3.2.jar包

    Apache Shiro是Java的一个安全框架,旨在简化身份验证和授权。Shiro在JavaSE和JavaEE项目中都可以使用。它主要用来处理身份认证,授权,企业会话管理和加密等。

    spring boot整合redis实现shiro的分布式session共享的方法

    import org.apache.shiro.session.UnknownSessionException; import org.apache.shiro.session.mgt.eis.AbstractSessionDAO; import org.springframework.beans.factory.annotation.Autowired; import org.spring...

Global site tag (gtag.js) - Google Analytics