1、 自定义实现类实现接口HandlerInterceptor
package com.ltl.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 登陆拦截器,
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
//在目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//用户登录成功发送的sessoin
Object user = request.getSession().getAttribute("loginUser");
if(user == null){
//未登陆,返回登陆页面
request.setAttribute("msg","没有权限请先登陆");
request.getRequestDispatcher("/index").forward(request,response);
return false;
}else{
//已登陆,放行请求
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 {
}
}
2、 自定义配置类MyMvcConfig实现WebMvcConfigurer接口中的addInterceptors方法
package com.ltl.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author LTL
* @date 2021-06-24 14:49
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/index").setViewName("login");
registry.addViewController("/main.html").setViewName("dashboard");
}
//添加拦截器配置
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/index","/","/user/login","/assets/**");
}
}
addPathPatterns是拦截的请求,excludePathPatterns是不拦截的请求,/assets/**是bootstrap的静态文件
完成上面两步就算是配置好了拦截器了
我的用户登录Controller
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
UserMapper userMapper;
//用户登录
@PostMapping("/login")
public String login(@RequestParam("email") String email,
@RequestParam("password")String password,
HttpSession session, Map<String,Object> map){
User user = userMapper.userLogin(email,password);
if(user!=null){
System.out.println(user);
session.setAttribute("loginUser",user.getUsername());
return "redirect:/main.html";
}else{
//登陆失败
map.put("msg","邮箱密码错误");
return "login";
}
}
在浏览器直接请求/main.html的运行结果,拦截成功。