自定义登录拦截器
1. 设置会话 loginUser 属性
package com.allen.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpSession;
@Controller
public class LoginController {
@RequestMapping("/user/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model,
HttpSession session){
if(!StringUtils.isEmpty(username) && "123".equals(password)){
session.setAttribute("loginUser",username);
//重定向到主页,main.html 跳转到视图 dashboard.html
return "redirect:/main.html";
}else{
model.addAttribute("msg","username or password is incorrect");
return "index";
}
}
@RequestMapping("/user/logout")
public String userLogout(HttpSession session){
session.invalidate();
return "redirect:/index.html";
}
}
2.编写自定义拦截器,根据 loginUser 属性判断是否放行
package com.allen.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Allen
* @date 2020/12/23 17:02
*/
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginUser = request.getSession().getAttribute("loginUser");
if(loginUser==null){ //没有用户名
request.setAttribute("msg","please sign in");
request.getRequestDispatcher("/index.html").forward(request,response);
return false;
}
return true; //放行
}
}
3.注册拦截器,并根据项目设置拦截路径
项目目录如下

- addPathPatterns():拦截所选路径
- excludePathPatterns():不拦截所选路径
package com.allen.config;
import com.allen.interceptor.LoginHandlerInterceptor;
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 Allen
* @date 2020/12/22 20:17
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
registry.addViewController("/main.html").setViewName("dashboard");
}
//自定义国际化组件生效
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
//拦截器生效
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").
excludePathPatterns("/index.html","/","/user/login","/css/*","/img/*","/js/*");
}
}