本文将提供一个案例,回顾如何在springboot中使用拦截器。
首先明白为何使用拦截器,拦截的是什么?
比如你设计了一个网站,为这个网站设计了一个登陆界面后,希望在登录界面进行身份验证,进入系统。但我可以直接访目标url,绕过登陆界面,直接进入首页。
因此需要设置只能访问登录的url,禁止直接访问其他的url。这就需要依靠拦截器设置一下。
此图就解释了拦截器拦截的就是url地址,设置哪些路径不能直接访问,更安全。
目录
- 1 定义controler层
- 2 设置拦截器顺序
- 3 设置拦截规则
- 4 运行结果
- 5 总结
对测试案例的介绍:提供两个url(登陆和首页),演示如何设置禁止访问首页的url
项目结构
1 定义controler层
@controller
public class test(){
@RequestMapping("/oa/login")
@ResponseBody
public String login(){
Systems.out.println("这是登陆界面");
return "登录界面";
}
@RequestMapping("/oa/index")
@ResponseBody
public String login(){
Systems.out.println("这是首页");
return "进入首页";
}
}
2 设置拦截器顺序
public LoginInterceptor implement HandlerInterceptor(){
/**
* preHandle(): 在业务处理器处理请求之前被调用
* @param request
* @param response
* @param handler 拦截器对象,因此我们需要创建一个拦截器对象传给参数
* @return false 拦截成功 ,看到空白界面
* true 不拦截,正常访问
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler){
Systems.out.println("在启动前拦截");
return false;
}
}
3 设置拦截规则
public class Myappconfig implement WebMvcConfigurer(){
//@Configuration说明:
// 声明类Myappconfig是一个配置类
@Configuration
//接口WebMvcConfigurer说明:
//本来应该在xml文件中配置MVC相关的东西(如配置拦截器);但是springboot简化成了一个MVC类,调用方法进行相关配置
//比如配置MVC的拦截器,重写addInterceptors()
public class Myappconfig implements WebMvcConfigurer {
/**
* addInterceptor(拦截器对象):拦截器注册类提供的方法
* @param registry 拦截器注册类对象
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println("读取配置类");
HandlerInterceptor handlerInterceptor = new LoginInterceptor();
//设置拦截地址,拦截localhost:8080/user/**
String[] path = {"/user/**"};
//设置不拦截的地址 不拦截localhost:8080/user/login
String[] excludepath = {"/user/login"};
//拦截器注册类提供的方法
registry.addInterceptor(handlerInterceptor).addPathPatterns(path).excludePathPatterns(excludepath);
}
}
4 运行结果
可以直接访问(未拦截)
访问到空白界面(已拦截)----------LoginInterceptor 类返回值是flase
可以直接范围(取消拦截)--------------LoginInterceptor 类返回值是ture
5 总结
对拦截器的学习,可以重点关注实现逻辑,设置拦截器顺序与设置拦截器规则,这里面涉及到了两个心类。没有什么新注解需要过多关注的。