1.首先创建一个类LoginHandlerInterceptor ,并且继承HandlerInterceptor 接口
//实现一个拦截器的功能需要继承HandlerInterceptor接口,并且实现里面的方法
package com.cn.springboot.config;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 登录检查
*/
@Component
public class LoginHandlerInterceptor implements HandlerInterceptor {
//目标方法执行之前进行检查
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginUser");
System.out.println("user的值"+user);
if(user==null){
//未登录,返回登录页面
request.setAttribute("msg","你没有权限,请先登录");
//此处不能写/login.html,因为我们不能直接访问模板里面的页面
request.getRequestDispatcher("/").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.接下来在配置类中进行相应的配置,该类需要继承WebMvcConfigurer,实现相应的方法
package com.cn.springboot.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("/login");
registry.addViewController("/loginsuccess.html").setViewName("main");
}
//注册拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//这里将上面的类注入到这里来,这里可以拦截所有的请求,除了"/"和"/user/login"的请求不拦截
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/","/user/login");
}
}
//@Configuration标记的类表示这是一个配置类