SpringSecurity-ExceptionTranslationFilter的作用
ExceptionTranslationFilter捕获异常并做相应的处理。处理逻辑如下:
1.首先判断是不是SpringSecurity产生的异常,如果是将在handleSpringSecurityException(request, response, chain, ase)处理,否则抛出ServletException/RuntimeException;
2.handleSpringSecurityException方法首先判断是否是AuthenticationException异常,如果是就跳转到登录页面;否则如果是AccessDeniedException,先判断是否是匿名用户,如果是,也将跳转到登录页面,如果是已认证用户,则交给accessDeniedHandler处理。
3.跳转到登录界面前,HttpSessionRequestCache会保存当前请求的url,登录认证通过后会直接跳转到之前访问的页面。使用这个功能不能将<form-login>的always-use-default-target属性设置为TRUE,默认是FALSE的。这个逻辑在SavedRequestAwareAuthenticationSuccessHandler中处理。
4.捕获异常跳转页面时可以根据异常类型在url后面添加对应错误代码,以便在登录页面给出提示信息。一个简单的实现是继承LoginUrlAuthenticationEntryPoint类,然后重写
protected String determineUrlToUseForThisRequest(HttpServletRequest request,
HttpServletResponse response, AuthenticationException exception) { return getLoginFormUrl();
}
在实现体里可以给返回结果添加错误代码。比如如果要在登录页面添加验证码,验证码填写错误抛出一个异常,这里就可以根据异常类型添加对应的错误代码,然后在登录失败页面给出对应提示。
5.对于登录时产生的异常,默认的SimpleUrlAuthenticationFailureHandler已经把异常放置到了session中,以便跳转后的页面使用。
request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION,
exception); public static final String AUTHENTICATION_EXCEPTION = "SPRING_SECURITY_LAST_EXCEPTION";
SpringSecurity-ExceptionTranslationFilter的作用的更多相关文章
- 【SpringSecurity系列2】基于SpringSecurity实现前后端分离无状态Rest API的权限控制原理分析
源码传送门: https://github.com/ningzuoxin/zxning-springsecurity-demos/tree/master/01-springsecurity-state ...
- SpringSecurity在Springboot下使用的初步体验
SpringSecurity曾经在十年前非常火热,只要是做权限系统,当时几乎非用它不可,记得是在XML文件里一堆的配置.曾几何时,Shiro冒了出来,以其简洁和轻量的风格慢慢地捕获了众多码农的心,从此 ...
- Spring Security 接口认证鉴权入门实践指南
目录 前言 SpringBoot 示例 SpringBoot pom.xml SpringBoot application.yml SpringBoot IndexController SpringB ...
- [转]springSecurity源码分析—DelegatingFilterProxy类的作用
使用过springSecurity的朋友都知道,首先需要在web.xml进行以下配置, <filter> <filter-name>springSecurityFilterC ...
- day5 SpringSecurity权限控制jsr250注解不起作用 AOP日志排除不需要织入的方法 web.xml配置错误码页面
- SpringSecurity-FilterSecurityInterceptor的作用
FilterSecurityInterceptor也是很重要的一个interceptor,它的作用是对request进行权限判断,允许访问或者抛出accessDenied异常. 这个类继承Abstra ...
- SpringSecurity的Filter执行顺序在源码中的体现
在网上看各种SpringSecurity教程时,都讲到了SpringSecurity的Filter顺序.但是一直不知道这个顺序在源码中是如何体现的.今天一步一步的查找,最终找到顺序是在FilterCo ...
- springboot+mybatis+springSecurity+thymeleaf
配置步骤: .pom <dependencies> <dependency> <groupId>org.springframework.security</g ...
- CAS客户端与SpringSecurity集成
4. CAS客户端与SpringSecurity集成 4.1 Spring Security测试工程搭建 (1)建立Maven项目casclient_demo3 ,引入spring依赖和spring ...
- springSecurity安全框架的学习和原理解读
最近在公司的项目中使用了spring security框架,所以有机会来学习一下,公司的项目是使用springboot搭建 springBoot版本1.59 spring security 版本4.2 ...
随机推荐
- python中实现并发的手段之 协程
几种实现并发的手段 进程 启动多个进程 进程之间是由操作系统负责调用线程 启动多个线程 真正被CPU执行的最小单位实际是线程 开启一个线程 创建一个线程 寄存器 堆栈 关闭一个线程协程 本质上是一个线 ...
- linux安装elasticsearch-head和elasticsearch-analysis-ik及遇到的各种问题
1.获取elasticsearch-head http://mobz.github.io/elasticsearch-head/ 下载并解压 wget https://github.com/mobz/ ...
- Linux下一个进程可以开多少线程
这个问题,整理了一下网上的资料,结果如下: 一.ulimit -n可以查看一个进程最多可以打开多少文件描述符数: 二.一个进程最多可以产生多少线程,可用如下的方法: 32位linux系统最大内存地址4 ...
- linux 安装配置zookeeper
1.什么是zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用 ...
- java输入最大10位数,倒数输出(很鸡肋)
public class D { public static void main(String[] args) { System.out.println("请输入数字(最大十位数):&quo ...
- Java WEB ----- 文件的上传
最近学到的web阶段的文件的上传,就想记录一下,帮助自己复习以及帮助大家学习,一般我都会把上传的文件存到服务器中的web-inf 下面,因为这样用户不会直接访问到,我们存到数据库的一般都是路径.这里没 ...
- 高性能场景下,HashMap的优化使用建议
1. HashMap 在JDK 7 与 JDK8 下的差别 顺便理一下HashMap.get(Object key)的几个关键步骤,作为后面讨论的基础. 1.1 获取key的HashCode并二次加工 ...
- centos重置密码
重置root密码: 法一: 1.开机按e 2.将linux 16后的ro改为rw init=/sysroot/bin/ ...
- Python简介(一)
1.Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- Altera FPGA SoC搭建步骤
Altera SoC 官方搭建指南: https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide 官方文档中除 ...