在访问页面的时候用户要先登陆才能访问其他页面,这一点就可以通过session对象来判断此用户是否是合法用户实现
1. 需求
只有登陆的用户才能发送/admin/*的请求,未登录的都不能访问并跳转到登录页
2. 实现
2.1 登陆方法控制器
@PostMapping("/admin/login")
public String login(@RequestParam String username,
@RequestParam String password,
HttpSession session,
RedirectAttributes redirectAttributes){
System.out.println(username);
System.out.println(password);
User user = userService.checkUser(username, password);
if(user!=null){
user.setPassword(null);
session.setAttribute("user",user);
System.out.println("true");
return "adminindex";
}else {
redirectAttributes.addFlashAttribute("message","用户名或密码错误");
return "redirect:/admin";
}
}
可以看到,如果用户登陆,会把用户信息存到Session域中
2.2 实现拦截器
拦截路径为/admin/*的请求,并判断域对象中是否有用户登陆的信息,有则放行,否则跳转到登录页
public class LoginInterceptor extends HandlerInterceptorAdapter {
//拦截器 不登陆不可以访问/admin/下的url
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
if(request.getSession().getAttribute("use") == null){
response.sendRedirect("/admin");
return false;
}
return true;
}
}
2.3 配置拦截器
配置拦截器,拦截器拦截/admin/**的所有请求,但是会放行/admin/login(为了发送登陆请求)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin")
.excludePathPatterns("/admin/login");
}
}