全局异常拦截和Spring Security认证异常的拦截的顺序

📑前言

本文主要全局异常拦截和Spring Security认证异常的顺序,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是青衿🥇
☁️博客首页:CSDN主页放风讲故事
🌄每日一句:努力一点,优秀一点

如果同时配置了全局异常拦截和authenticationEntryPoint拦截,它们的处理顺序将取决于具体的配置和触发条件。

全局异常拦截器:

如果在Controller层发生错误,并且已经配置了全局异常拦截器,错误会被全局异常拦截器捕获并进行相应的处理。这意味着全局异常拦截器会先于authenticationEntryPoint拦截器执行。
全局异常拦截器可以捕获各种类型的异常,包括Spring框架内部的异常、自定义异常等。你可以定义不同类型的异常处理方法,根据具体的异常类型进行相应的处理逻辑。

authenticationEntryPoint拦截器:

如果Controller层发生错误,并且请求需要经过Spring Security的身份验证,且已经配置了authenticationEntryPoint拦截器,错误会被authenticationEntryPoint拦截器捕获并进行相应的处理。这意味着authenticationEntryPoint拦截器会在全局异常拦截器之后执行。
authenticationEntryPoint通常用于处理未经身份验证的访问请求,例如重定向到登录页面或返回身份验证错误信息等。

总结

如果异常是身份验证相关的问题,即需要经过Spring Security进行处理的异常,一般情况下会先被全局异常拦截器捕获,然后再被authenticationEntryPoint拦截器处理。

全局异常拦截器可以捕获各种类型的异常,包括身份验证相关的异常。当出现身份验证问题时,异常会首先被全局异常拦截器捕获。然后根据配置,如果请求需要经过Spring Security的身份验证,authenticationEntryPoint拦截器会接管处理这个异常,例如重定向到登录页面或返回身份验证错误信息。

总的来说,无论异常是否是身份验证相关的问题,先被全局异常拦截器捕获是一个较为通用的处理流程。而后续的处理则取决于具体的异常类型和Spring Security的配置。

📑文章末尾

在这里插入图片描述

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
项目描述 说明: spring security 全注解式的权限管理 动态配置权限,角色和资源,权限控制到按钮粒度 采用token进行权限校验,禁用session,未登录返回401,权限不足返回403 采用redis存储token及权限信息 内置功能: 用户管理:用户查询、添加用户、修改用户、给用户分配角色 菜单管理:菜单列表、添加菜单、修改菜单、删除菜单、权限配置、菜单图标设置、菜单排序 角色管理:角色查询、添加角色、修改角色、删除角色 代码生成:根据表名生成bean、controller、dao、Mapper.xml、列表页、搜索、分页、新增页、修改页 job集群:创建job、取消job、查询job、下拉搜索spring bean 数据源监控:druid 接口swagger文档 日志查询 邮件管理:发送邮件、搜索邮件 文件管理:上传文件、文件列表、文件删除 公告管理:公告未读提醒、发布公告、查询公告、公告阅读人列表 excel下载:自定义sql导出excel、也可在页面展示sql结果数据 字典管理:一些常量字典的维护 个人信息修改 修改密码 头像修改 其他说明: 日志模块 sl4j日志分包:将sql日志、业务日志、异常日志进行了分离,更方便定位问题 日志表:使用aop拦截实现 权限控制:基于token方式,禁用session 对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂sql采用Mapper.xml配置 使用了layui的弹出层、菜单、文件上传、富文本编辑、日历、选项卡、数据表格等 表单数据采用bootstrapValidator校验,简单快捷方便 运行环境 jdk8+mysql+redis+IntelliJ IDEA+maven 项目技术(必填) Springboot+Mybatis+ SpringMvc+springsecrity+Redis+bootstrap+jquery 数据库文件 压缩包内 jar包文件 maven搭建
spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、elasticsearch、security、shiro等 #### Spring Boot 版本 - 2.0.3.RELEASE #### 模块说明 - springboot-basic - Spring Boot 基础知识,包括SpringBoot起步、配置详解、aop、filter、拦截器、监听、启动器、全局异常处理、外部Tomcat启动、HTTPS、监控 等。 - springboot-data - Spring Boot 数据库操作,包括SpringJDBC、JPA、Mybatis注解版 & XML版、MongoDB。其中,每个版本都有其对应的多数据源解决方案。 - springboot-caches - Spring Boot 缓存,包括redis、ehcache、spring-cache、memcached、使用redis实现session共享 等。 - springboot-templates - Spring Boot 模板,包括thymeleaf、freemarker、jsp、表单校验 等。 - springboot-docs - Spring Boot 文档生成工具,包括 Swagger、Spring RestDocs - springboot-bussiness - Spring Boot 业务应用,包括 定时任务、上传文件、发送邮件、Doc文档操作 等。 - springboot-ajax - Spring Boot AJAX 跨域,包括 JSONP、Node.js与SpringBoot集成使用反向代理 等。 - springboot-websockets - Spring Boot 使用 Websocket - springboot-webflux - Spring Boot 集成 WebFlux 开发反应式 Web 应用 - springboot-dubbo - Spring Boot 集成 Dubbo 的三种方式 - springboot-search - Spring Boot 集成 搜索引擎,包括 elasticsearch、solr - springboot-mq - Spring Boot 集成 消息队列,包括 kafka、rabbitmq、activemq、rocketmq、redismq - springboot-auth - Spring Boot 权限认证,包括 Apache Shiro、Spring Security - springboot-cloud - Spring Cloud 入门,包括 Eureka(服务注册与发现)、Config(配置中心)、Hystrix(断路器)、Bus(消息总线) 等
Spring Security中实现全局拦截可以通过配置拦截器链来实现。以下是一种常见的实现方式: 1. 创建一个继承自WebSecurityConfigurerAdapter的配置类,并添加@Configuration注解。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); } } ``` 在这个配置类中,我们重写了configure方法,并配置了HttpSecurity对象。authorizeRequests()方法定义了URL的访问权限,这里使用anyRequest().authenticated()表示所有的请求都需要进行身份验证。formLogin()方法启用了表单登录,httpBasic()方法启用了基本身份验证。 2. 如果你有自定义的UserDetailsService来处理用户认证,可以在配置类中添加以下方法: ```java @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } ``` 在这个方法中,我们使用userDetailsService()方法指定了自定义的UserDetailsService,并使用passwordEncoder()方法指定密码加密器。 3. 最后,如果你想对特定的URL进行访问控制,可以在configure方法中使用antMatchers()方法进行配置。例如,以下代码将限制对"/admin"路径的访问权限: ```java @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/admin").hasRole("ADMIN") .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); } ``` 在这个例子中,我们使用antMatchers()方法指定了"/admin"路径,并使用hasRole("ADMIN")限制了只有拥有"ADMIN"角色的用户才能访问。 通过以上配置,我们实现了全局拦截,即对所有请求进行身份验证和访问控制。你可以根据自己的需求进行配置和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值