第一步:写一个自己的拦截器
public class LoginHandlerIntercepter implements HandlerInterceptor {
private final Logger logger = LoggerFactory.getLogger(LoginHandlerIntercepter.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("拦截到请求");
Object user = request.getSession().getAttribute("LoginUser");
if (user == null) {
//未登录,返回登录界面
try {
// request.setAttribute("msg", "你无权登录");
// request.getRequestDispatcher("/index.html").forward(request, response);
response.sendRedirect("/index.html");
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
}
logger.info("处理完请求,不知道是不时跳转过去了");
return false;
} else {
//已登录,返回true允许访问
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 {
}
}
//这里本想用服务器内部的跳转,携带请求msg信息,方便在前台给出相应的提时,可是不知道为什么会500错误,
//找了很久不知道什么原因,先放弃了,知道 的大神可以告诉我一下啊,模板引擎用的是springboot推荐的thymeleaf
第二步:在WebMvcConfig中添加拦截器,只需要重写addIntrceptors方法就可以了,并添加拦截的内容:
springboot会把任何WebMvcConfig类型的bean自动识别。从写的方法会用我们自己写的,没有重写的部分会用springboot为我们自动配置的。前提时不要使用@EnableWebMvc的那个标签:这个标签的意思是,全面接管springMVC的配置,所有的配置我们都得配置一遍,不然很多功能不能正常运行。
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
/**
* 默认首页设置,当请求时项目地址的时候 返回login
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("login");
registry.addViewController("/index.html").setViewName("login");
registry.addViewController("/main.html").setViewName("dashboard");
}
/**
* 添加拦截器,并排除不需要拦截的地址
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerIntercepter()).addPathPatterns("/**")
.excludePathPatterns("/index.html", "/", "/user/login","/asserts/**","/webjars/**");
}
}
**到这里就可以,只要被链接的请求,在没有登录的情况下,都会被强制转到登录界面;但是没有提示,如果想要携带信息过去就得用
request.setAttribute(“msg”, “你无权登录”);
request.getRequestDispatcher("/index.html").forward(request, response);
在页面接受msg信息就可以了 用thymleaf模板的话可以
<p style="color: #34ce57" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>