一、创建拦截器实现接口HandlerInterceptor
package com.example.lan_jie_qi.Interceptor;
import com.example.lan_jie_qi.model.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//编写业务拦截规则
//从session中获取用户信息
User user= (User) request.getSession().getAttribute("user");
//判断用户是否登录
if(user==null)
{
//未登录
response.sendRedirect(request.getContextPath()+"/user/yj");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
编写User类
package com.example.lan_jie_qi.model;
public class User {
private String name;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
二、编写拦截器配置类
package com.example.lan_jie_qi.config;
import com.example.lan_jie_qi.Interceptor.UserInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration //定义此类为配置类
public class InterceptorController implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截user下的所有请求,这些请求必须用户登录才可以访问,但有部分请求不登陆也可以访问
String[] addPathPatterns={
"/user/**"
};
//排错user下的某些请求,使得用户没有登录也可以访问
String[] excludePathPatterns={
"/user/no",
"/user/login",
"/user/yj"
};
//使用那个拦截器、要拦截的路径、要排除的路径
registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
}
}
三、编写控制类
package com.example.lan_jie_qi.controller;
import com.example.lan_jie_qi.model.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping(value = "/user")
public class UserController {
@RequestMapping(value = "/login")
public Object login(HttpServletRequest request)
{
User user=new User();
user.setId("1001");
user.setName("sunrui");
request.getSession().setAttribute("user",user);
return "login SUCCESS";
}
//该请求登录成功后才可访问
@RequestMapping(value = "/cg")
public Object cj()
{
return "cj";
}
//该请求不登陆也可访问
@RequestMapping(value = "/no")
public Object no()
{
return "no";
}
//如果用户未登录,但访问了需要登录的请求,会跳转到该请求
@RequestMapping(value = "/yj")
public Object yj()
{
return "没有登录";
}
}