Springboot使用拦截器
- 1.创建一个 SpringBoot 框架 Web 项目
- 2.实现一个登录拦截器
- 3.创建一个控制层
- 4.@Configuration 定义配置类-拦截器
- 5.测试
代码展示
- 1.创建一个 SpringBoot 框架 Web 项目
- 2.实现一个登录拦截器
//实现HandlerInterceptor接口,重写preHandle方法
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入拦截器------------------------------");
//编写业务拦截的规则
//从session中获取用户的信息
User user = (User) request.getSession().getAttribute("user");
//判断用户是否登录
if (null == user) {
//未登录
response.sendRedirect(request.getContextPath() + "/user/error");
return false;
}
return true;
}
}
- 3.创建一个控制层,实体层
实体层User .java
public class User {
private Integer id;
private String username;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
创建控制层UserController .java
@Controller
@RequestMapping(value = "/user")
public class UserController {
//用户登录的请求,需要排除
@RequestMapping(value = "/login")
public @ResponseBody Object login(HttpServletRequest request) {
//将用户的信息存放到session中
User user = new User();
user.setId(1001);
user.setUsername("zhangsan");
request.getSession().setAttribute("user",user);
return "login SUCCESS";
}
//该请求需要用户登录之后才可访问
@RequestMapping(value = "/center")
public @ResponseBody Object center() {
return "See Center Message";
}
//该请求不登录也可访问
@RequestMapping(value = "/out")
public @ResponseBody Object out() {
return "Out see anytime";
}
//如果用户未登录访问了需要登录才可访问的请求,之后会跳转至该请求路径
//该请求路径不需要用户登录也可访问
@RequestMapping(value = "/error")
public @ResponseBody Object error() {
return "error";
}
}
- 4.@Configuration 定义配置类-拦截器
@Configuration //定义此类为配置文件(即相当于之前的xml配置文件)
public class InterceptorConfig implements WebMvcConfigurer {
//mvc:interceptors
@Override
public void addInterceptors(InterceptorRegistry registry) {
//要拦截user下的所有访问请求,必须用户登录后才可访问,
// 但是这样拦截的路径中有一些是不需要用户登录也可访问的
String[] addPathPatterns = {
"/user/**"
};
//要排除的路径,排除的路径说明不需要用户登录也可访问
String[] excludePathPatterns = {
"/user/out", "/user/error","/user/login"
};
//mvc:interceptor bean class=""
registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
}
}
- 5.测试
启动springboot程序
访问http://localhost:8080/user/center,
被拦截器拦截跳转到
访问http://localhost:8080/user/out
不被拦截,不登录也能访问到该页面
访问http://localhost:8080/user/login
访问http://localhost:8080/user/center