一、安全隱患
由於應用的一些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配置類。