一、安全隐患
由于应用的一些api存在安全隐患,需要处理一下,所以想到了拦截器,先拦截所有api,然后对需要对开放对api单独放行
二、自定义拦截器
@Component
public class LoginHandlerInterceptor implements HandlerInterceptor {
String loginUrl = PropertyUtil.getProperty("login");
@Autowired
private HttpServletRequest httpServletRequest;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
MyUser user = PlatformUserUtils.getUser(httpServletRequest);
// System.err.println("user:"+user);
if (user == null) {
System.err.println("用户未登录!");
//未登录,返回登录页面
response.sendRedirect(loginUrl);
return false;
}else {
System.err.println("登录人Name:" + user.getName() );
//放行
return true;
}
} catch (Exception e) {
System.err.println("用户未登录,接口api禁止访问!");
response.sendRedirect(loginUrl);
// e.printStackTrace();
}
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
}
}
三、配置拦截器配置类
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");//允许js跨域
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
// .excludePathPatterns("/papers/findPapers")
;
super.addInterceptors(registry);
}
}
- 其中addInterceptor方法用于把刚才创建的拦截器加入到registry中,
- addPathPatterns用户加入所要拦截的url,/**表示拦截所有请求。
- excludePathPatterns添加不需要拦截的请求。
至此,一个拦截器就配置好了。如果需要配置多个拦截,只需要另外创建一个自定义拦截器,给registry再加一个inteceptor就可以了,不用再创建一个新的config配置类。