控制器:WebConfig
注:有很多同学说静态资源被拦截了,处理方法:在addResourceHandlers中加入静态资源映射,本文映射为/static/**了,然后在拦截器中excludePathPatterns中加入/static/**,这样静态资源即可放行。
package com.nyfz.util.interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
LoginInterceptor loginInterceptor;
/**
* 不需要登录拦截的url
*/
final String[] notLoginInterceptPaths = {"/static/**","/admin/login","/error/**","/login"};
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 这里添加多个拦截器
// 登录拦截器
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
.excludePathPatterns(notLoginInterceptPaths);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/* @Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/templates/");
resolver.setSuffix(".html");
resolver.setViewClass(JstlView.class);
return resolver;
}*/
/**
* 配置不需要经过controller就跳转到登录页面
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/login").setViewName("login");
}
/***
* addResourceLocations指的是文件放置的目录,addResoureHandler指的是对外暴露的访问路径
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// TODO Auto-generated method stub
//排除静态资源拦截
registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
登录拦截器:LoginInterceptor
package com.nyfz.util.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@Configuration
public class LoginInterceptor extends HandlerInterceptorAdapter{
Logger logger = LoggerFactory.getLogger(getClass());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("进入LoginInterceptor拦截器==============");
String basePath = request.getContextPath();
String path = request.getRequestURI();
logger.info("basePath:" + basePath);
logger.info("path:" + path);
logger.info("userkey:"+request.getSession().getAttribute("userkey"));
if(request.getSession().getAttribute("userkey") == null){
logger.info("尚未登录,跳转到登录界面");
response.setHeader("Content-Type", "text/html;charset=UTF-8");
response.sendRedirect(request.getContextPath() + "/login");
return false;
}
logger.info("已登录,放行!");
return true;
}
}
本文介绍了如何在Spring Boot 2.0中配置拦截器,特别是处理登录拦截以及避免静态资源被拦截的问题。通过在WebConfig中设置静态资源映射并指定拦截器排除静态资源路径,确保静态文件可以正常访问。
786

被折叠的 条评论
为什么被折叠?



