Springboot如何去掉URL后面的jsessionid

要去掉Spring Boot应用程序中URL后的JSESSIONID,可以在servlet过滤器中进行配置,具体步骤如下:

  1. 创建一个过滤器类,并实现javax.servlet.Filter接口。
@Component
public class JSessionIdFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        if (request instanceof HttpServletRequest
                && response instanceof HttpServletResponse) {

            HttpServletRequest httpRequest = (HttpServletRequest) request;
            HttpServletResponse httpResponse = (HttpServletResponse) response;

            // 从URL中移除JSESSIONID
            if (httpRequest.isRequestedSessionIdFromURL()) {
                String url = httpRequest.getRequestURI();
                String session = httpRequest.getRequestedSessionId();
                url = url.replaceAll(";jsessionid=" + session, "");
                httpResponse.sendRedirect(url);
                return;
            }
        }

        chain.doFilter(request, response);
    }
}

在上面的代码中,我们将javax.servlet.Filter接口实现为JSessionIdFilter类,并从doFilter方法中获取到ServletRequestServletResponse对象。

接下来我们判断ServletRequest是否类型是HttpServletRequestServletResponse是否类型是HttpServletResponse,如果是则可以强制转换为这两种类型的对象。

我们在httpRequest对象中调用isRequestedSessionIdFromURL方法判断是否从URL中传递了JSESSIONID,如果是,我们将其从URL中删除,然后使用httpResponse.sendRedirect方法将其重定向到无JSESSIONID的URL。

  1. 配置过滤器
    在应用程序的主配置类中添加以下配置来注册JSessionIdFilter
@Configuration
public class AppConfig {

    @Bean
    public FilterRegistrationBean<JSessionIdFilter> jsessionIdFilter() {
        FilterRegistrationBean<JSessionIdFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new JSessionIdFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("JSessionIdFilter");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

在上面的代码中,我们使用@Configuration注解标记该类,将其注册为Spring的一个配置类。

我们使用@Bean注解将JSessionIdFilter添加到应用程序中,并设置过滤器的名称为“JSessionIdFilter”和优先级为1。

我们并使用addUrlPatterns方法来设置过滤器的匹配规则,这里设置为“/*”,表示匹配所有的URL。

示例一:

假设我们有一个Spring Boot应用程序,它的上下文路径为“/myapp”。我们将其部署到一个Web服务器上,并将其公开为“http://localhost:8080/myapp”URL。如果用户在URL中传入JSESSIONID,比如“http://localhost:8080/myapp;jsessionid=xyz”,那么我们希望自动将其重定向到“http://localhost:8080/myapp”URL,那么可以使用上述方法进行配置。

示例二:
我们在Spring MVC应用程序中使用了注解驱动,这意味着我们的请求映射不仅可以使用传统的Controller和RequestMapping注解,还可以使用@GetMapping、@PostMapping和其他各种注解。在这种情况下,我们可以通过将JSessionIdFilter注册在DelegatingFilterProxy的代理中,来使其与注解驱动一起使用,示例如下:

@Configuration
public class AppConfig {

    @Bean
    public FilterRegistrationBean<DelegatingFilterProxy> delegatingFilterProxy() {
        FilterRegistrationBean<DelegatingFilterProxy> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new DelegatingFilterProxy("springSecurityFilterChain"));
        registrationBean.setOrder(1);
        return registrationBean;
    }

    @Bean
    public FilterRegistrationBean<JSessionIdFilter> jsessionIdFilter() {
        FilterRegistrationBean<JSessionIdFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new JSessionIdFilter());
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("JSessionIdFilter");
        registrationBean.setOrder(2); // 这个过滤器执行的顺序比上一个要晚
        return registrationBean;
    }
}

在上面的代码中,我们使用DelegatingFilterProxyJSessionIdFilter注入到Spring Security代理中。这使得我们可以使用该过滤器配置来删除URL中的JSESSIONID,该过滤器也可以与注解驱动一起使用,确保 URL 中不会出现 JSESSIONID

这里提一下,若项目使用Spring Security配置了API的鉴权,JSESSIONID是通过cookie而非URL来传递的,上述过滤器可能无法完全达到预期效果。这时需要通过配置httpSession来禁用URL传递,代码示例如下:

@Configuration
public class HttpSessionConfig extends HttpSessionConfigurerAdapter {
    @Override
    public void configure(HttpSessionSecurityContextRepository sessionRepository) {
        sessionRepository.setAllowSessionIdInUrl(false);
    }
}

以上就是Spring Boot如何去掉URL后面的JSESSIONID的详细攻略,希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot如何去掉URL后面的jsessionid - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 将Java程序的输出结果写到txt文件中的方法

    将Java程序的输出结果写到txt文件中是一个常见的需求,通常我们使用Java IO流来实现。下面是实现此目标的完整攻略。 1. 创建输出文件 首先需要创建输出文件,可使用如下代码: File outputFile = new File("output.txt"); 这里创建了一个名为“output.txt”的文件。这个文件如果不存在则会…

    Java 2023年5月19日
    00
  • 使用Spring方法拦截器MethodInterceptor

    使用Spring方法拦截器MethodInterceptor可以在方法执行前、执行后、抛出异常时等时刻进行自定义的操作。以下是完整攻略及两条示例: 1. 导入Spring AOP依赖 在项目的pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework</groupId&…

    Java 2023年5月19日
    00
  • JavaWeb项目部署到服务器详细步骤详解

    以下是JavaWeb项目部署到服务器的详细步骤: 1. 准备工作 在进行JavaWeb项目部署之前,需要先进行一些准备工作。首先是服务器环境的准备。服务器需要安装Tomcat、JDK以及MySQL等相关软件,并且需要配置好环境变量等一些基本设置。 其次,需要将JavaWeb项目进行打包处理。一般来说,我们可以通过eclipse或者IntelliJ IDEA等…

    Java 2023年5月24日
    00
  • Java如何把数组转换为ArrayList

    将Java中的数组转换为ArrayList的过程可以分为两个步骤: 创建一个ArrayList对象 将数组中的元素添加到ArrayList中 以下是完整的转换过程及示例说明: 创建ArrayList对象 要将数组转换为ArrayList,首先需要创建一个新的ArrayList对象。可以使用泛型来定义ArrayList存储的数据类型,根据需要创建一个整型Arr…

    Java 2023年5月26日
    00
  • 基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法

    下面我将详细讲解“基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法”的完整攻略。 1. 获取法定节假日列表 首先,我们需要获取法定节假日的列表。这个列表可以通过国家法定节假日的规定来获得,例如中国的法定节假日列表可以通过国务院发布的公告来获取。 我们取到的列表格式可能是类似以下的内容: { "春节": [ "202…

    Java 2023年5月20日
    00
  • JSP使用自定义标签防止表单重复提交的方法

    JSP使用自定义标签防止表单重复提交的方法,可以通过以下步骤来实现: 第一步:编写防重复提交逻辑处理代码 在服务器端,可以编写逻辑处理代码,例如在Java Servlet的doGet()或doPost()方法中进行处理,避免重复提交表单。具体实现方式,可以在session中设置一个令牌token,每次提交表单时检查是否存在该令牌,如果存在则认为表单重复提交,…

    Java 2023年6月15日
    00
  • SpringBoot 监控管理模块actuator没有权限的问题解决方法

    我来为您详细讲解“SpringBoot 监控管理模块actuator没有权限的问题解决方法”的完整攻略。 问题描述 在使用 SpringBoot 监控管理模块 actuator 时,可能会遇到没有权限的问题,例如访问 http://localhost:8080/actuator 时出现 {“timestamp”:”2021-07-28T12:34:56.78…

    Java 2023年5月20日
    00
  • java 制作验证码并进行验证实例详解

    Java 制作验证码并进行验证实例详解 验证码(CAPTCHA)是一种人机识别技术,用于区分网站的访问者是否为真实的人类用户。在 Java 中,开发者可以通过以下步骤来生成验证码并进行验证: 1. 生成验证码 生成验证码的方法有很多,流行的方法包括使用 Jigsaw 插图、数学公式等等,本文介绍如何使用 Java 的内置工具类来生成随机字符的验证码。 pub…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部