Shiro (http:/xxxxx/;JSESSIONID=xxxx) InvalidRequestFilter 400无法跳转到登录页问题

解决cas客户端地址栏中带jessionId刷新无法跳转到登陆页的问题 一、问题出现 springboot项目中集成了cas,清除缓存,想要跳到登陆页面,但是由于地址栏中带有jessionId标识,导致无法正常跳转。 Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了 原因: 首先这是一个保险措施 因为Session默认是需要Cookie支持的,但有些客户浏览器是关闭Cook... 阅读详情

shiro: 1.6

spring: 5.2

访问:http://localhost:8080/demo/;JSESSIONID=655def62-75b3-4ab1-ae27-b7d0e42c431a时, 出现400错误页面,无法跳转到登录页。

当浏览器本地cookie禁用或者部分链接跳转时,会默认加上 ;JSESSIONID=  参数传递cookie中存储的sessionId, 后端Filter过滤器会首先尝试从cookie中获取sessionId,获取不到时尝试解析uri连接(;/JSESSIONID=xxx)获取sessionId,再获取不到尝试从请求参数中获取。

正常情况下,访问该链接,若session过期,会自动跳转到登录页。

但是再shiro:1.6开始,新增了一个InvalidRequestFilter的过滤器,用于拦截存在安全问题的uri,该过滤器拦截三种类型的uri并返回400拒绝访问:(http://xxx/;JSESSIONID=xxx中存在分号)

public class InvalidRequestFilter extends AccessControlFilter {

    private static final List<String> SEMICOLON = Collections.unmodifiableList(Arrays.asList(";", "%3b", "%3B"));

    private static final List<String> BACKSLASH = Collections.unmodifiableList(Arrays.asList("\\", "%5c", "%5C"));

    // 拦截uri地址中存在分号的请求
    private boolean blockSemicolon = true;
    // 拦截uri中存在反斜杠的请求
    private boolean blockBackslash = true;
    // 拦截uri中存在非ascii码的请求
    private boolean blockNonAscii = true;


    ....省略....


    @Override
    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        String uri = WebUtils.toHttp(request).getRequestURI();
        return !containsSemicolon(uri)
            && !containsBackslash(uri)
            && !containsNonAsciiCharacters(uri);
    }

    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
        WebUtils.toHttp(response).sendError(400, "Invalid request");
        return false;
    }
}

对于所有进来的请求,过滤器都会进行一次前置和后置判断,确认是否继续执行剩余未执行的过滤器。

AdviceFilter:

    public void doFilterInternal(ServletRequest request, ServletResponse response, FilterChain chain)
            throws ServletException, IOException {

        Exception exception = null;

        try {
            // 当请求uri被认为不合法是返回false
            boolean continueChain = preHandle(request, response);
            if (log.isTraceEnabled()) {
                log.trace("Invoked preHandle method.  Continuing chain?: [" + continueChain + "]");
            }

            if (continueChain) {
                executeChain(request, response, chain);
            }

            postHandle(request, response);
            if (log.isTraceEnabled()) {
                log.trace("Successfully invoked postHandle method");
            }

        } catch (Exception e) {
            exception = e;
        } finally {
            cleanup(request, response, exception);
        }
    }

preHandle方法最终实现再AccessControlFilter中:

    public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
        // 这两个方法就是InvalidRequestFilter中的方法,InvalidRequestFilter是AccessControlFilter的子类
        return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);
    }

处理方法主要有三种:

1. xml配置覆盖默认的InvalidRequestFilter:  blockSemicolon设置为false

	<bean id="invalidRequestFilter" class="org.apache.shiro.web.filter.InvalidRequestFilter">
		<property name="blockSemicolon" value="false" />
	</bean>

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
         ....省略...
		<property name="filters">
			<map>
                名字key要与默认(invalidRequest)的相同才能覆盖初始化时的InvalidRequestFilter
				<entry key="invalidRequest" value-ref="invalidRequestFilter" />
			</map>
		</property>
	</bean>

2. shiro降到1.6之前(或许1.6之后有改进,暂时没有关注)

3. 自定义ShiroFilter并设置setEnable(false) 将不在进行上述三种类型uri安全性拦截

标准Spring项目升级shiro1.10.0后 url路径带中文报400错误简单有效解决 标准Spring项目升级shiro1.10.0后 url路径带中文报400错误,简单有效不踩坑的方案 阅读详情

相关推荐

华为硬件逻辑岗笔试题(一)

积少成多,集腋成裘,坚持!!! 目录 1. 进制转换 2. 状态机和编码方式 3. 存储器的分类 4. Verilog语法中的操作符 5. 对组合逻辑的认识 6. 对时序逻辑的认识 7. 竞争冒险的认识 8. 基本时序逻辑电路 9. 建立时间和保持时间 10. 同步时序电路 11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...

qq_42235129的博客 1万+

shiro1.6升级到1.7后的问题处理

由于shiro1.6出现了安全漏洞,需要进行1.7的升级 问题描述 进行升级后有个url突然访问不了,HTTP返回了400,Invaild Request。 接收的URL为 xxx/detail/{name}。 前端传递的地址为 xxx%2fdetail%2f%e6%88%bf%e4%ba%a7(带有中文,已用URL编码) 思路 看到HTTP响应400,我在想是前端参数出了什么问题吗?还是后台接收参数改动了吗? 看了git记录,这边没人改动,那这就很灵性了,只能通过调试找出哪个地方访问了400了,我

qq_35598240的博客 1万+

分析以太网帧结构_100G以太网接口调试初体验

是的,标题没有多敲一个“0”,明人不说暗话,就是在FPGA上实现100G以太网接口设计。正好参与了实验室某项目中的100G接口的调试,早想写个专栏文章了,由于调试过程中发现了一些硬件问题,导致迟迟没有往前推进,现在问题解决了之后可以简单分享一下100G以太网接口的调试初体验了~(好像DDR4读写测试系列文章还没搞完 )这篇初体验暂时不分多个章节了,基本设计流程与之前发布的“10G以太网接口”系列文...

weixin_39574050的博客 1603

springboot shiro升级后请求路径URL path传中文参数报400invalid reqeust

将项目中的fhiro升级后发现通过url path传中文的所有请求都报400 invalid reqeust错误。1、ShiroConfig类增加InvalidRequestFilter Bean。2、修改shiro过滤器配置Bean增加。3、重启应用,问题解决。完整的过滤器配置如下。

weixin_52472152的博客 1480

使用sklearn学习多项式回归(三)

1,什么是线性 我们无数次提到”线性“这个名词。在支持向量机中,我们也曾经提到最初的支持向量机只能够分割线性可分的数据,然后引入了”核函数“来帮助我们分类那些非线性可分的数据。我们也曾经说起过,比如说决策树,支持向量机是”非线性“模型。所有的这些概念,让我们对”线性“这个词非常熟悉,却又非常陌生——因为我们并不知道它的真实含义。接下来我们看看线性回归模型改进的核心之一:帮助线性回归解决非线性问题。 1.1,变量之间的线性关系 ”线性“这个词用于描述不同事物时有着不同的含义。我们最常使用的线性是指“变量

理科男同学 5101

stm32f103c8t6+esp8266在WiFi下通过手机控制外设

stm32f103c8t6+esp8266在WiFi下通过手机控制外设前言 前言 通过上一篇,介绍了esp8266的基本功能,这篇将用stm32c8t6配合esp8266进行数据交互,实现用手机通过无线的方式去控制外设、开关等;这里相当于把stm32作为上一篇的串口助手和esp8266进行通信; ...

weixin_45430735的博客 1万+

Shiro去掉登录时url里的JSESSIONID,允许分号 中文参数

Shiro升级1.8之后默认不允许中文参数,以及分号(;)参数,导致系统首次打开时,因带有;JSESSIONID=参数,系统出现400错误页面。

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 1479

最新CobaltStrike4.8/CobaltStrike4.9、CS4.9/CS4.8、 Windows/Linux/Mac版下载

Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器。自3.0以后已经不在使用Metasploit框架而作为一个独立的平台使用,分为客户端与服务端,服务端是一个,客户端可以有多个,非常适合团队协同作战,多个攻击者可以同时连接到一个团队服务器上,共享攻击资源与目标信息和sessions,可模拟APT做模拟对抗,进行内网渗透。 Cobalt Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java木马生成,

weixin_43167326的博客 7972

SpringMVC+Shiro 因jsessionid导致第一次访问请求时报400错误问题

【现象】 HTTP Status 400 – Bad Request TypeStatus Report MessageInvalid request DescriptionThe server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request messag...

一火的专栏 2948

ubuntu:E: 无法定位软件包yum解决方法

如果出现以下问题,则需要更新yum源 yum源位于/etc/apt/sources.list yum源更新的网站有 清华大学开源镜像 中科大开源镜像 1.此处更新yum源的时候先备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo gedit /etc/apt/sources.list 将更新源替换成上面符合版本系列号 我用的版本号为20.04 # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释

码农研究僧的博客 1万+

SpringAI系列 - MCP篇(二) - MCP Server Boot Starter

此处需注意之前的。

罗小爬的技术宝书 1320

shiro最新版本 1.6.0登录bug修复

2020年8月17日,shiro发布了1.6.0版本,修复了绕过认证的bug。但实际升级后,使用中发现第一次打开浏览器访问时会出现Invalid request。具体错误提示如下: 降级到1.4.2时是可以正常登录的,反复试验几次,确定是升级shiro版本引起,阅读shiro 1.6.0源码,发现shiro引入了InvalidRequestFilter过滤器,目的是验证url上是否有恶意伪造的特殊字符。但这个类也正好将登录url拼接的 ;jsessionId=xxx 也一起拦截了,结果就出现了上图中的错

m0_67391120的博客 1670

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

shiro历史漏洞分析—CVE-2020-11989/CVE-2020-13933

shiro历史漏洞分析—CVE-2020-11989/CVE-2020-13933

include_voidmain的博客 2083

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

shiro用authc配置后登录成功后不能跳转到index页面

这两天发现一个问题,如题,尝试了很多方法,都没法解决,真是很郁闷。最后看源码才知道,我的配置如下。原意是从/api/user/login登录成功后,跳转到/index,但是怎么都不能跳转到/index。原来authc拦截器(即FormAuthenticationFilter),验证成功后只会跳转到最开始你进入的页面,因为我是从/api/user/login页面进入登录,所以只会跳转到/api/u...

Ydoing的专栏 1716

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

解决Shiro第一次重定向url携带jsessionid问题

Shiro在进行第一次重定向时会在url后携带jsessionid,导致访问400。 实力有限,就不分析源码了,需要了解原因的可以查看ShiroHttpServletResponse类中encodeRedirectURL、encodeRedirectUrl、toEncoded等方法,直接说下解决办法 解决办法: 创建一个DefaultWebSessionManager类实例,并将它的sessionIdUrlRewritingEnabled属性设置成false 再在DefaultWebSecurityMan

Ruanes的博客 2985

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring Boot + Shiro 自定义FormAuthenticationFilter,出现登录成功不能正常跳转还停留登录页面问题

Spring Boot + Shiro 自定义FormAuthenticationFilter,出现登录成功不能正常跳转还停留登录页面问题 Spring Boot + Shiro ,自定义FormAuthenticationFilter出现登录成功不能正常跳转还停留登录页面问题 自定义FormAuthenticationFilter import org.apache.shiro.web.filt...

xuyp95的博客 3924

使用shiro框架,解决跳转页面出现404的问题

shiro框架是一个安全框架,在进行登录的时候,如果没有配置路径,它会跳到shiro的默认配置的路径“/”下面,所以总是会出现404的错误,因为它的路径是保存在session中 所以需要我们把session里面的数据清除了,然后再设置跳到需要调的界面,下面是它的操作步骤: 1.首先自己写一个类继承类FormAuthenticationFilter,具体的代码如下: import javax....

weixin_30840253的博客 1381

Spring boot+Shiro身份认证失败返回JSON,不跳转页面

文章目录前言步骤1、重写FormAuthenticationFilter2、注册自定义过滤器 前言 shiro在进行身份认证时,如果失败了,默认会跳转到Web工程根目录下的"/login.jsp"页面,如果在配置类中配置了这句话: shiroFilterFactoryBean.setLoginUrl("/myLogin"); 认证失败后会跳转到setLoginUrl这个方法指定的路径中。 这里说...

江湖人称小程的博客 7581

shiro启动之后页面访问不了_java:shiro入门——4

【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候,会被【7.3】角色过滤使用“admin”用户登录,密码:123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后:此时点击“列表”,因为当前admin用户是有admin角色所有可以正常访问点击“添加”,因为当前adm...

weixin_39661780的博客 778

分享 Shiro 学习过程中遇到的一些问题

最近在学习 shiro 安全框架后,自己手写了一个小的管理系统 web 项目,并使用 shiro 作为安全管理框架。接下来分享一下在这过程中,遇到的一些问题以及自己的解决思路和方法。 一、Log out 之后再次登录,出现 403 forbidden 这个问题不一定所有朋友都会碰到,出现的原因是我的 webapp 根目录下没有 index 页面(我的 index 页面放在 /WEB-INF/vie...

weixin_30861797的博客 269

解决:shiro版本导致静态资源中文名称无法访问

静态资源是直接使用的springboot的ResourceHandlerRegistry来进行配置访问的,没有使用Nginx,Apache等。1.自定义过滤器,继承ShiroFilterFactoryBean,设置blockNonAscii为false。,其中blockNonAscii默认为true,路径含中文会被过滤掉。2.替换ShiroConfig.java中的过滤器配置为自定义配置类。多次断点调试,发现原来是最近。项目使用的springboot+在做文件预览时发现,

dopapapa的博客 821

解决Shiro第一次重定向url带有jsessionid导致400错误

在Shiro进行第一次重定向时,会在url后携带jsessionid,这会导致400错误(无法找到该网页)。 原因在于ShiroHttpServletResponse配置类的doIsEncodeable当中,会将url自动拼接jsessionid。 解决办法: 在Shiro的配置类中的sessionManager()方法中,将sessionIdUrlRewritingEnabled属性设置为false。该方法返回一个DefaultWebSessionManager实例。 将上面方法返回的实例设置为Defa

shellhard的博客 2992

Apache Shiro WEB支持

在开发过程中,您可以禁用 ssl 过滤器。如果您希望会话配置设置和集群可以跨 servlet 容器移植(例如,测试中的 Jetty,但生产中的 Tomcat 或 JBoss),或者您想要控制特定的会话/集群功能,您可以启用 Shiro 的本地会话管理。Shiro 的所有开箱即用的过滤器实现都是这个的子类,因此可以在不从过滤器链中删除它们的情况下启用或禁用它们。要为您的 Web 应用程序启用本机会话管理,您需要配置一个支持 Web 的本机会话管理器,以覆盖默认的基于 servlet 容器的会话管理器。

allway2的博客 913

Shiro 架构

架构图: 1.1 Subject Subject即主体,外部应用与subject进行交互,subject记录了当前操作用户,将用户的概念理解为当前操作的主体,可能是一个通过浏览器请求的用户,也可能是一个运行的程序。 Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,而subject是通过Secu...

mengxianglong123的博客 402

请求路径上带有或出现jsessionid的处理办法

请求路径上带有或出现jsessionid的处理办法问题示例解决办法一.新建拦截器或过滤器,项目中已有拦截器或者过滤器的,想复用也可以二.在拦截器```preHandle```方法中进行处理问题诱因 问题示例 请求路径中带有;jsessionid=xxx等字符串: 示例如下: http://localhost:8089/;jsessionid=72E275DDDD4FFC3FBDCAB91BF5108B37template/templateList?pageSize=10&pageNum=1&

qq_39727959的博客 7920
上一篇: Random SecureRandom 随机数生成阻塞问题
下一篇: PyInstaller打包ModuleNotFoundError: No module named ‘xxxx‘
mcatto
博客等级 码龄15年 87粉丝 205原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值