1.springboot的配置项
@Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { // @Override // public void addCorsMappings(CorsRegistry corsRegistry){ // /** // * 所有请求都允许跨域,使用这种配置就不需要 // * 在interceptor中配置header了 // */ // corsRegistry.addMapping("/**") // .allowCredentials(true) // .allowedOrigins("*") // .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // .allowedHeaders("*") // .maxAge(3600); // } }
2.拦截器中处理
添加拦截器
@Autowired private AuthInterceptor authInterceptor; // @Override // public void addCorsMappings(CorsRegistry corsRegistry){ // /** // * 所有请求都允许跨域,使用这种配置就不需要 // * 在interceptor中配置header了 // */ // corsRegistry.addMapping("/**") // .allowCredentials(true) // .allowedOrigins("*") // .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // .allowedHeaders("*") // .maxAge(3600); // } /** * 添加自定义拦截器 */ @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(authInterceptor) .addPathPatterns("/**")//拦截的访问路径,拦截所有 .excludePathPatterns("/static/*")//排除的请求路径,排除静态资源路径 .excludePathPatterns("/user/login") .excludePathPatterns("/user/getUserInfo") .excludePathPatterns("/error") .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**"); ; super.addInterceptors(registry); }
拦截器处理
/** * TODO * * @author hs * @date 2020/12/28 15:47 */ @Component public class AuthInterceptor implements HandlerInterceptor { @Autowired GdUserService userService; @Autowired GdRoleService roleService; @Autowired GdAuthService authService; /** * 在整个请求结束之后被调用,DispatcherServlet 渲染视图之后执行(进行资源清理工作) */ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } /** * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后) */ @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { } /** * 在请求处理之前进行调用(Controller方法调用之前) * * @return 返回true才会继续向下执行,返回false取消当前请求 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Allow-Headers", "Content-Type,userToken"); response.setHeader("Access-Control-Expose-Headers", "*"); if (request.getMethod().equals("OPTIONS")) { // returnJson(response,null ); return true ; }
//鉴权业务逻辑
//………………
return true ; } private void returnJson(HttpServletResponse response, String json) throws Exception{ PrintWriter writer = null; response.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=utf-8"); try { writer = response.getWriter(); writer.print(json); } catch (IOException e) { System.out.println("response error"+e.toString()); } finally { if (writer != null) writer.close(); } } }