Shiro记住我无效,被拦截

场景描述:

Shiro的记住我功能就是登录的时候,选择了记住当前用户的选项来登录,关闭浏览器之后,在登录信息存活期间再次访问项目里的某个页面可以直接访问。可以在程序中对某些敏感操作进行判断是否为通过记住我登录的用户,从而进行其他一系列限制操作。

在按照网上的配置配置完之后,发现记住我之后再次访问其他功能时,会被拦截,并且不会通过项目中debug打了断点的部分,直接被跳转到未登录处理的登录页面,而且我查了很多很多的相关配置文档,都试了就是实现不了。事实上是取到了cookie中保存的信息,被拦截后的页面地址栏如下:

http://localhost:xxxx/xxxx/login.do;jsessionid=4D328B61960C713B2F563385F85EC43C

原因:

通过询问其他朋友,发现是因为实体类没有序列化,Shiro是将实体对象序列化保存到本地cookie中,但是很多文档都没有提及这一点,或许是自己没有这个意识。

解决办法:

更改之前:

public class User  {
...
}

更改之后:

public class User implements Serializable {
...
}

再次测试的时候,发现通过debug就会走项目中的打了断点的地方。

设置自定义拦截器将本地用户放入到session中

参考文章地址:https://blog.csdn.net/u011277123/article/details/70214599

场景描述:

其他所有的controller中涉及到用户的都是从session中获取,但是通过记住我登录的用户的用户信息是放在本地的cookie中,然后shiro获取后是将其放入的subject中,通过subject可以获取记住我用户的信息,但是我的jsp页面中通过el标签获取了用户对象并展示在前台页面,所以干脆我就做了一个自定义过滤器,所有访问都需要走一遍这个过滤器,如果是通过记住我登录的,就把本地获取的用户对象放入到session中,配置如下:

java类:

public class MyRememberFilter extends FormAuthenticationFilter {@Overrideprotected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {Subject subject=getSubject(request,response);// 如果是记住我登录的,则需要处理一下// isRemembered为true、isAuthenticated为falseif(!subject.isAuthenticated() && subject.isRemembered()){// 通过记住我第一次进程序,并且保存的principal中有内容,添加用户到sessionif(subject.getSession().getAttribute("user")==null && subject.getPrincipal() != null){subject.getSession().setAttribute("user",subject.getPrincipal());}}return subject.isAuthenticated() || subject.isRemembered();}
}

applicationContext.xml中的bean引入shiro过滤器配置:

 <!--自定义全局过滤器--><bean id="MyRememberFilter" class="com.xxx.xxx.shrio.MyRememberFilter"></bean>   ...<!-- web.xml中shiro的filter对应的bean --><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">...<!--在shiro中使用自定义过滤器--><property name="filters"><util:map><entry key="MyRemember" value-ref="MyRememberFilter"></entry></util:map></property><!-- 指定过滤器Anon:不指定过滤器,这个过滤器是空的,什么都没做,跟没有一样。Authc:验证,这些页面必须验证后才能访问,也就是我们说的登录后才能访问。user:验证+记住我--><property name="filterChainDefinitions"><value><!--静态资源-->/static/** = anon<!--链接-->/login.do=anon/toLogin.do=anon/** = user<!--自定义过滤器-->/** = MyRemember</value></property></bean>
</beans>

我只放了相关的配置,无关的都省略掉了;

by the way:

1.Shiro的其他配置建议看这位博主文章,我认为是写的最工整易懂的:https://blog.csdn.net/u012737182/article/category/6489910

2.序列化与反序列化的相关文章:https://blog.csdn.net/qq_27093465/article/details/78544505

Shiro记住我无效,被拦截;相关推荐

  1. shiro登陆成功后被拦截_Springboot+Shiro+redis整合

    1.Shiro是Apache下的一个开源项目,我们称之为Apache Shiro.它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与spring Security 一样都是 ...

  2. shiro设置url过滤,不拦截指定的url

    我们用了shiro做权限处理,所以当用户登录或者是调用接口时,都会进入到登录页面,但是现在我需要写一个向外暴露的接口,给前端返回数据.这个时候就需要在shiro-context.xml中配置了.那么先 ...

  3. Java Shiro 设置 anon 无效

    我在这里定义 /user/login 路径设置为anon 但还是会经过过滤器 解决方案如下: 过滤规则map要为LinkedHashMap

  4. SpringBoot学习:整合shiro(rememberMe记住我功能)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 首先在shiro配置类中注入rememberMe管理器 /*** cookie对象;* ...

  5. Shiro和Spring结合对请求路径进行过滤和记住我过滤操作

    一,请求路径的过滤器 SessionExpireFilter.java如下: package com.innotek.core.support.filter;import javax.servlet. ...

  6. SpringBoot+Shiro实现登陆拦截功能

    上一章讲到使用自定义的方式来实现用户登录的功能,这章采用shiro来实现用户登陆拦截的功能. 首先介绍下Shiro:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码 ...

  7. springboot+shiro自定义拦截器互踢问题

    shiro自定义拦截器继承AccessControllerFilter,实现session互踢机制. 应用场景: 我们经常会有用到,当A 用户在北京登录 ,然后A用户在天津再登录 ,要踢出北京登录的状 ...

  8. Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】

    前言 本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门 一.Shiro基础知识 在学习Shiro这个框架之前,首先我们要先 ...

  9. log中文乱码 springboot_springboot + shiro 权限注解、统一异常处理、请求乱码解决

    springboot + shiro 权限注解.统一异常处理.请求乱码解决 前篇 后台权限管理系统 20200808新版本更新 版本升级及内容优化版本,改动内容: 版本更新,springboot从1. ...

  10. spring boot + mybatis + layui + shiro后台权限管理系统

    后台管理系统 版本更新 后续版本更新内容 链接入口: springboot + shiro之登录人数限制.登录判断重定向.session时间设置:https://blog.51cto.com/wyai ...

最新文章

  1. [转]Webkit内核探究【2】——Webkit CSS实现
  2. Python 求最大子集的递归实现
  3. markdown 行内公式_如何轻松将笔记转为思维导图(Word、Markdown)
  4. 面试风云录(01) - 怎样回答这两个问题?
  5. leetcode--983.最低票价
  6. 通过VS2010性能分析来查找代码中那些地方最损耗资源
  7. pro git学习笔记 4
  8. 【对讲机的那点事】维修对讲机你会拆卸电路板上的集成电路块吗?
  9. VM虚拟机下载及安装教程
  10. 远卓:数字化转型的精益化思考
  11. PN5180射频识别芯片学习笔记
  12. STM32编程--GPIO配置
  13. p6spy监测mysql_JDBC数据库访问操作的动态监测 之 p6spy
  14. Spatial Dropout
  15. Oracle数据库获取当前自然周,当前周的起始和结束日期
  16. 网络流--最大流问题
  17. linux下查看cpu峰值,linux下查看CPU信息
  18. 【debug】Python pandas dataframe.groupby().sum不显示结果,只显示groupby中的条件列
  19. python测试10.28
  20. 网站开发CSS十条口诀

热门文章

  1. markdown 设置目录跳转的简单方法
  2. # 第一次面试问题详解
  3. 大龄程序员的出路究竟在何处?从369个过来人问答贴里,我们得到了答案
  4. 计算机主机包含哪些基本设备,计算机的主机主要包括什么
  5. 计算机主机的组成的两部分,计算机的主机由哪两个部分组成
  6. 怎么吸引百度蜘蛛抓取自己的网页
  7. 计算机网络拓扑星型优点和缺点,星型结构拓扑有哪些优缺点 星型结构拓扑优缺点介绍【图文】...
  8. ArcBlock 赴美国华盛顿州议会作证支持区块链立法
  9. java加密文件夹_怎样用JAVA给文件夹加密,拜求各位大侠!
  10. OpenStack HA