shiro与spring security用自定义异常处理401错误

我将为您详细讲解 “Shiro与Spring Security用自定义异常处理401错误”的完整攻略。

首先,我们先了解一下什么是401错误。401错误表示未经授权或身份验证失败。在Shiro和Spring Security中,当用户获取未授权的访问时,系统将返回401错误。

接着,我们可以通过自定义异常处理程序来处理401错误。

一、Shiro的自定义异常处理401错误

1.首先在Shiro配置文件中添加异常处理器

<!-- 添加自定义异常处理器 -->
<bean id="exceptionHandler" class="com.example.MyExceptionHandler"></bean>
<property name="exceptionHandler" ref="exceptionHandler"/>

2.编写自定义异常处理器MyExceptionHandler.java

public class MyExceptionHandler extends SimpleMappingExceptionResolver {
    @Override
    protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

        if (ex instanceof UnauthorizedException) {
            response.setStatus(401);
            return new ModelAndView("redirect:/401");
        }
        return super.doResolveException(request, response, handler, ex);
    }
}

这里我们重写了SimpleMappingExceptionResolver的doResolveException方法,当异常是UnauthorizedException时,设置响应状态码为401,跳转到指定的401页面。如果是其他异常,则执行默认的处理方式。

3.在web.xml文件中配置ShiroFilter

<!-- 配置ShiroFilter -->
<filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>ShiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

二、Spring Security的自定义异常处理401错误

1.继承Spring Boot的ErrorController类,并实现处理方法

@RestController
public class MyErrorController implements ErrorController {

    private static final String PATH = "/error";

    @RequestMapping(PATH)
    public ResponseEntity error(HttpServletRequest request) {

        HttpStatus status = getStatus(request);
        if (status == HttpStatus.UNAUTHORIZED) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Unauthorized");
        }
        return ResponseEntity.status(status).body(status.getReasonPhrase());
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
        if (statusCode != null) {
            try {
                return HttpStatus.valueOf(statusCode);
            }
            catch (Exception ex) {
                // ignore
            }
        }
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}

2.在Spring Boot应用程序主类中添加错误处理器

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public WebMvcConfigurer webMvcConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/401").setViewName("401");
            }

            @Override
            public void configureErrorControllers(ErrorPageRegistry registry) {
                registry.addErrorController(new MyErrorController());
            }
        };
    }
}

这里我们添加了一个自定义错误控制器MyErrorController,并在Spring Boot主类中配置了错误路径。

以上就是Shiro与Spring Security用自定义异常处理401错误的攻略。这里提供两个示例,你可以根据自己的需要选择其中一种进行实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:shiro与spring security用自定义异常处理401错误 - Python技术站

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

相关文章

  • 基于Java回顾之JDBC的使用详解

    基于Java回顾之JDBC的使用详解 1. 什么是JDBC JDBC是Java DataBase Connectivity的缩写,它是用于Java语言操作关系型数据库的应用程序接口(API)。JDBC提供了一种标准的方法,用于连接和操作各种类型的关系型数据库。 JDBC规范定义了一套Java类库,通过这些类库,我们可以在Java程序中使用SQL命令执行各种数…

    Java 2023年5月19日
    00
  • Java实现后台发送及接收json数据的方法示例

    首先我们来详细讲解“Java实现后台发送及接收json数据的方法示例”的攻略。在实现后台发送及接收json数据的过程中,可以使用Java中的两种方式:使用HttpURLConnection实现 JsonRequest 和使用HttpClient实现 Json 请求。下面分别来介绍这两种方式的具体实现。 使用HttpURLConnection实现JsonReq…

    Java 2023年5月26日
    00
  • SpringBoot整合spring-data-jpa的方法

    下面是关于Spring Boot整合spring-data-jpa的方法的详细攻略: 1. 引入依赖 在pom.xml文件中,增加以下两个依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st…

    Java 2023年5月20日
    00
  • Mybatis超详细讲解构建SQL方法

    “Mybatis超详细讲解构建SQL方法”是一篇关于Mybatis框架中构建SQL方法的详细攻略。该攻略主要介绍了Mybatis框架中构建SQL的方式及其相关技巧。 前置知识 在学习本篇攻略前,需要对以下知识点有一定的了解: Mybatis框架的使用及基本概念 SQL语句的基本语法及特性 Java的基本语法及编程思想 构建SQL方法 在Mybatis框架中,…

    Java 2023年5月19日
    00
  • jQuery实现在列表的首行添加数据

    下面是详细的jQuery实现在列表的首行添加数据的完整攻略。 过程概述 实现在列表的首行添加数据,可以通过以下步骤完成: 使用jQuery选择器选中列表的第一个元素; 创建需要添加的数据的HTML代码; 使用jQuery的插入方法在第一个元素前插入新增数据。 代码实现 示例 1 在列表首行插入一条文本数据: // 获取列表的第一个元素 var $firstI…

    Java 2023年6月16日
    00
  • JavaSpringBoot报错“HttpMessageConversionException”的原因和处理方法

    原因 “HttpMessageConversionException” 错误通常是以下原因引起的: 请求体格式不正确:如果您的请求体格式不正确,则可能会出现此错误。在这种情况下,您需要检查您的请求体格式并确保它们正确。 请求体类型不支持:如果您的请求体类型不支持,则可能会出现此。在这种情况下,您需要检查您的请求体类型并确保它们受支持。 解决办法 以下是解决 …

    Java 2023年5月4日
    00
  • java项目中读取jdbc.properties文件操作

    当我们在Java项目中使用JDBC操作数据库时,需要连接数据库,加载驱动程序、设置数据源等,这些信息通常是被写在一个名为jdbc.properties的配置文件里。因此,在Java项目中读取jdbc.properties文件操作是非常重要的。接下来,我将为您介绍如何进行读取jdbc.properties文件操作的完整攻略。 1. 了解jdbc.propert…

    Java 2023年5月19日
    00
  • jsp页面中插入css样式的三种方法总结

    下面将详细讲解jsp页面中插入css样式的三种方法总结。 方法一:直接在jsp页面中使用style标签 在jsp页面的标签中添加 标签,然后直接在其中编写CSS样式即可。 示例: <%@ page contentType="text/html;charset=UTF-8" language="java" %&gt…

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