权限控制之异常处理方式三|学习笔记

简介: 快速学习权限控制之异常处理方式三

开发者学堂课程【Spring Security知识精讲与实战演示(二):权限控制之异常处理方式三】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/731/detail/13055


权限控制之异常处理方式三

 

内容介绍

一、 处理异常步骤

二、 代码

 

一、处理异常步骤

编写这个专门它的原理还是拦截器,首先要写个拦截器,其次在spring配置文件中,属于配置拦截器,可以在MVC中用Internet去配置,但如果只是做异常处理,就不需要重新去写一个拦截器,因为spring已经准备好了一个专门的接口,其底层原理也是拦截器,首先右键来创建一个新的对象,

image.png

这里边有一个叫advice,然后在这里边也可以写上Handler controller exception,需要将当前对象放入到IOC容器中,可以在这个对象上加controller注解,也可以直接加component注解, 这个component注解就是一个通用的IOC注解,它也能将对象放入到容器中,但是当不确定对象是哪一层的时候,用这个注解。现在的情况可以用它。接下来在这后边需要实现一个接口,叫HanderExceptionResolver。实现完这个接口之后,要知道它需要重写什么方法,看一下参数,首先request response,这是select的一个API,后面这两个东西,@param o这个是出现异常的对象,就哪个对象出一层就是一个objase,但这个一般情况用的也不多,接下来是@param e出现的异常信息。这个是需要用的,返回值是model And View。看着复杂实际简单,因为真正要处理异常,并不是要把这个异常给解决掉,只是想让它跳转到自己定义的一个相对来说比较友好的一个界面而已,所以哪一个对象出现异常了,可以直接去判断这个异常的信息,根据异常的信息来做一个跳转,首先有一个返回值Model And View,写上一个MV等于new一个Model and view。这里边也可以将MV return给他按掉,它其实可以这么来写,MV.add Object然后给他一个K值,比如说叫error Msg,然后写e.getmessage,这样就把异常信息给放进来了,这个是将异常信息放入request域中,但是这个基本不用,因为给它提示,每一个页面错误很明显,没必要再给一个英文的提示,然后还有一个是必须要写的,就是指定不同异常跳转的页面,比如 If可以先来e instanceof,属于AccessDeniedException异常,那就MV.setViewName,可以直接去写,但是这是经过视图解析器的,不要直接去写个403是错的,直接写403打开视图解析器,它会在前面拼一个前缀pages,后面拼个后缀jsp,所以不能让他经过视图解析器,可以加关键字forward:/403.jsp 加了这个就能直接过来,但是地址栏是不会变的,如果想让地址栏变,可以加上一个redirect,加forward是请求转发,加redirect是重定向,这两个都可以,不同的是加redirect,最后地址栏可能会变成403.jsp,如果加forward地址栏依旧是请求,比如请求的是这个地址栏,这边出现403,如果加了redirect,那地址栏就变成了403.jsp,当然可以加eles,直接向其他所有的异常导向500。这里面都是500,可以再细致分一下。再次重启,启动完成之后,直接访问。继续用xiaoma登陆。现在出现500,这里边是is denied,那这个异常是跳到500了,而不是跳到403,还将异常信息给了,自己写的request域,它会把这个异常推给你,但是这个异常应该不属于刚才那个异常,这个异常直接拦住了,连打印都没有打印,这个异常类是包到货,所以不出403,应该是倒包,虽然控制了但是他跳的不是想要的页面,再测一次,刷新完了之后再一次来访问,这里边继续用xiaoma登录,这个应该是会给跳到403的, product回车,这个方式成功了,但是这种方式写起来有点麻烦,spring提供了另外一种非常简单的方式,可以ctrlA 把这个全注掉,就意味这个类在这里边不存在了,接下来可以直接复制粘贴,那在这里边可以改个名字,叫Advice,然后所有的给他放开。之后将这个类名改一下,比如叫Handler Controller Advice,改过来之后注意,implements HanderEceptionResolver不需要写了,只需要在上面加上一个叫controller Advice注解,加了这个注解他就类似于已经实现这个接口,并且放到IOC容器中,类似于一个处理器,可以随便写,比如处理器可以写string返回路径,到这也可以写handerException主要是在上面需要加一个注解,这个注解叫ExceptionHander。他在注解的内部告诉这里是异常,只要是属于最大的Throwable异常都可以,以刚才AccessDeniedException为例,就要写多几个,下面包也不要导错。如果是这个异常接下来就到可以到403。如果不是这个地方,就可以再来一个。比如runttimeHanderException,统一来了500。这里面可以写很多个,功能跟上面差不多,也可以直接在runtime内部做判断,再来测试一下接下来就继续首页访问,用xiaoma点登陆。接下来继续点订单,他是可以访问的,接下来product回车, 得到下图

image.png

404这个地方不是没跳转成这个页面,就犯了一个错误,而是加了一个前后缀,经过视图解析器需要加一个前缀。比如redirect:/403,成功后可以看到他去的是403,是想要的结果,只不过忘记加关键字了,加forward加redirect都可以,接下来就继续访问,继续用xiaoma登录,403是没问题的,这里面是从定性到403,其实是访问这个productfindall重定向到403了。

 

 

二、代码

public class HandlerControllerException implements HandlerExceptionResolver{

/**

*Cparam httpServletRequest*Cparam httpServletResponse*Cparam o 出现异常的对象*Cparam e出现的异常信息

*@return Mode lAndView

*/

@Override

public ModelAndViewresolveException(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse, Ob ject

ModelAndViewmv=new ModelAndView()://将异常信息放入request域中,基本不用

mv.add0bject(attributeName:"errorMsg",e.getMessage());//指定不同异常跳转的页面 if(){

return mv;}

相关文章
|
2月前
|
前端开发 Java Spring
统一异常处理
统一异常处理
23 2
|
1天前
|
安全 Java 关系型数据库
实现权限控制的方法
实现权限控制的方法
|
10月前
全局统一异常处理
全局统一异常处理
42 0
|
12月前
|
前端开发 JavaScript Java
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回
本篇将要学习 Spring Boot 统一功能处理模块,这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor + WebMvcConfigurer 异常处理使用注解 @RestControllerAdvice + @ExceptionHandler 数据格式返回使用注解 @ControllerAdvice 并且实现接口 @ResponseBodyAdvice
430 0
|
数据安全/隐私保护
服务器端方法级权限控制----------@Secured注解的使用
服务器端方法级权限控制----------@Secured注解的使用
|
消息中间件 JavaScript 小程序
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 下
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 下
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 下
|
JavaScript 前端开发 小程序
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 上
SpringBoot 统一功能处理:用户登录权限校验-拦截器、异常处理、数据格式返回 上
|
安全 Java 数据安全/隐私保护
OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!
OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!
|
数据安全/隐私保护
Yii2如何实现访问控制?底层原理是什么?
Yii2如何实现访问控制?底层原理是什么?
|
前端开发 Java 数据库
@RestControllerAdvice 统一异常处理
@RestControllerAdvice 统一异常处理
@RestControllerAdvice 统一异常处理