修复shiro重定向引起的Response for preflight is invalid (redirect)的网络报错问题

简介: 最近集成shiro到项目中,遇到该一个报复Response for preflight is invalid (redirect)的问题。shiro集成,配置无权限的路径 @Bean(name = "shiroFilter") p...

最近集成shiro到项目中,遇到该一个报复Response for preflight is invalid (redirect)的问题。

  1. shiro集成,配置无权限的路径
    @Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) {
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        shiroFilterFactoryBean.setLoginUrl("/unauth");
        shiroFilterFactoryBean.setUnauthorizedUrl("/forbidden");
        Map<String, String> filterMap = InstanceUtil.newLinkedHashMap();
        for (String filter : filters.split("\\;")) {
            String[] keyValue = filter.split("\\=");
            filterMap.put(keyValue[0], keyValue[1]);
        }
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
        return shiroFilterFactoryBean;
    }

将登陆地址的url地址配置为/unauth

  1. 将无权限的路径配置成返回json数据
   @RequestMapping(value = "/unauth")
    @ResponseBody
    public Object unauth() {
        return ErrorResponseData.newInstance(HttpCode.UNAUTHORIZED, "未登陆");
    }

  1. 但在前端调用时,进行options预检时,报以下错误
Failed to load http://127.0.0.1:9080/getUserInfo: Response for preflight is invalid (redirect)
exception.js:32 Error: Network Error
    at createError (createError.js:16)
    at XMLHttpRequest.handleError (xhr.js:87)

经分析,报错原因是进行预检时,没有带上token,倒置会重定向到unauth路径中,所以进行调用时,会报如下错误。
解决办法是通过过滤器,如果判断请求为OPTIONS预检时,直接返回成功。 示例代码如下:

package com.starmark.core.shiro.advice;


import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
@ServletComponentScan
@WebFilter(urlPatterns = "/*",filterName = "shiroLoginFilter")
public class ShiroLoginFilter  implements Filter {

    private FilterConfig config = null;
    @Override
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
    }
    @Override
    public void destroy() {
        this.config = null;
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        // 允许哪些Origin发起跨域请求,nginx下正常
        // response.setHeader( "Access-Control-Allow-Origin", config.getInitParameter( "AccessControlAllowOrigin" ) );
        response.setHeader( "Access-Control-Allow-Origin", "*" );
        // 允许请求的方法
        response.setHeader( "Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,PUT" );
        // 多少秒内,不需要再发送预检验请求,可以缓存该结果
        response.setHeader( "Access-Control-Max-Age", "3600" );
        // 表明它允许跨域请求包含xxx头
        response.setHeader( "Access-Control-Allow-Headers", "x-auth-token,Origin,Access-Token,X-Requested-With,Content-Type, Accept" );
        //是否允许浏览器携带用户身份信息(cookie)
        response.setHeader( "Access-Control-Allow-Credentials", "true" );
        // response.setHeader( "Access-Control-Expose-Headers", "*" );
        if (request.getMethod().equals( "OPTIONS" )) {
            response.setStatus( 200 );
            return;
        }
        filterChain.doFilter( servletRequest, response );
    }


}

加入该过滤器后,解决了。

相关文章
|
5月前
|
前端开发 搜索推荐 Java
网络基础重定向和转发的区别
本文介绍了网络基础中重定向和转发的区别。重定向是服务器告知客户端访问新URL,涉及两次请求,URL变化;转发是服务器内部处理,客户端无感知,URL不变。文中详细对比了两者的请求次数、数据传递及应用场景,并通过实例演示帮助理解。
139 9
|
11月前
|
关系型数据库 MySQL 数据库
实时计算 Flink版操作报错合集之网络缓冲池(NetworkBufferPool)中可用内存不足,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
11月前
|
SQL 监控 安全
网络安全中的安全漏洞管理与修复:技术深度剖析
【7月更文挑战第8天】安全漏洞的管理与修复是网络安全工作的重要组成部分。通过定期的安全审计、更新与补丁管理、漏洞扫描与评估、及时修复及持续监控与响应等措施,可以有效提升网络系统的安全性。然而,网络安全是一项长期而艰巨的任务,需要不断关注最新的安全动态和技术发展,持续优化安全策略和管理流程,以应对日益复杂的网络安全挑战。
|
7月前
|
数据采集 JavaScript 前端开发
JavaScript重定向对网络爬虫的影响及处理
JavaScript重定向对网络爬虫的影响及处理
|
10月前
|
安全 网络安全 数据安全/隐私保护
数字堡垒的裂缝与修复:网络安全漏洞、加密技术与安全意识
【8月更文挑战第17天】 在数字化时代,网络安全如同一座保护数据资产不受侵犯的数字堡垒。然而,这座堡垒并非无懈可击,网络攻击者不断寻找并利用安全漏洞进行破坏活动。本文将深入浅出地探讨网络安全中常见的漏洞类型、加密技术的工作原理以及提升个人和组织安全意识的重要性,旨在为读者提供一套实用的网络安全知识框架,帮助加固数字堡垒的每一砖一瓦。
69 2
|
10月前
|
安全 网络安全 数据安全/隐私保护
数字堡垒的裂缝与修复:网络安全漏洞、加密技术与安全意识
在数字化浪潮中,网络安全成为保护个人隐私和企业资产的重要防线。本文深入探讨了网络安全的薄弱环节——漏洞的存在与影响,并分析了加密技术如何成为防御的关键工具。同时,强调了提升安全意识的必要性,指出这是构建坚实网络防御的基石。通过具体案例,揭示了安全威胁的现实面貌,并提出了有效的防护策略。
|
10月前
|
监控 安全 网络安全
网络安全漏洞:预防与修复的技术探索
【8月更文挑战第8天】网络安全漏洞的预防和修复是一个持续的过程,需要企业从多个维度入手,采取综合措施来保障网络和信息系统的安全。通过漏洞扫描与评估、及时更新与补丁管理、访问控制与权限管理、安全配置与审查以及员工培训与教育等手段,可以有效预防网络安全漏洞的发生。同时,在发现漏洞后,应迅速启动紧急响应机制进行修复,并持续跟踪漏洞状态以确保系统的安全稳定运行。最终,通过构建完善的网络安全防护体系,企业可以有效应对各种网络安全威胁,保障自身业务的安全和持续发展。
|
11月前
|
SQL 安全 算法
数字堡垒的裂缝与修复:网络安全漏洞、加密技术与安全意识
【7月更文挑战第29天】在数字化时代的浪潮中,网络安全成为维护信息资产的盾牌。本文深入剖析了网络环境中的安全威胁,包括软件漏洞、社交工程攻击等,并探讨了如何通过加密技术和安全意识教育来强化这面盾牌。我们将从基础概念出发,分析当前网络安全面临的挑战,进而介绍加密技术的原理和分类,以及提升个人和企业安全意识的具体措施。文章旨在为读者提供一套综合性的网络安全防护策略,以期在数字世界中构筑更加坚固的安全防线。
|
11月前
|
SQL 存储 安全
数字堡垒的裂缝与修复:网络安全漏洞、加密技术与安全意识的深度剖析
【7月更文挑战第27天】在数字化浪潮汹涌的今天,网络空间已成为信息交换的新战场。然而,随着网络攻击手段的不断升级,传统的防御策略已显不足。本文旨在探讨当前网络安全面临的挑战,分析常见的安全漏洞及其成因,深入讨论加密技术在数据保护中的关键角色,并强调提升个人与企业的安全意识在防范网络威胁中的重要性。通过案例分析和理论阐述,本文将提供一系列切实可行的解决方案,以加强我们的数字防线。
68 3
|
12月前
|
机器学习/深度学习 Serverless 文件存储
函数计算操作报错合集之在网络设置完成后进行挂载的指令,报错:找不到网络路径,该如何处理
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。

热门文章

最新文章