1、支持跨域,在需要跨域的控制器类上添加注解
//表示此类中所有接口可以是实现跨域 @CrossOrigin(origins = "*")
2、 添加security的配置类
2.1重要的是:
/ 跨域的配置类 @Autowired private CustomCorsConfigurationSource corsConfigurationSource;
.cors().configurationSource(corsConfigurationSource) .and()
2.2添加配置类
@Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { //不重写方法,调用父类方法 // super.configure(http); //将登录验证token过滤器放在过滤器链最前面 http.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); // 给一个异常处理器,走我们自定义的拒绝访问处理器,无权限走这个处理器 http.exceptionHandling(). accessDeniedHandler(accessDeniedHandler) // 给一个异常处理器,走我们自定义的认证失败处理器,认证失败走这个处理器 .authenticationEntryPoint(restAuthenticationEntryPoint); //http请求配置信息 ----!!!!!!! todo 需要鉴权的接口,不能被允许匿名访问!!!!!否则会报无权限 http //预检请求是浏览器发现不是简单请求后,封装一个OPTIONS请求到服务器,根据服务器的返回值来判断是否可以进行跨域, // 可以的话,后面还有一次真正带数据的请求。上面的response部分:就是预检请求后服务器端的响应 //预检请求通过 .cors().configurationSource(corsConfigurationSource) .and() //关闭csrf .csrf().disable() //不通过session获取securityContext .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers( "/user/notLogIn/**" ).anonymous() //除了上面的所有请求全部需要鉴权认证 .anyRequest().authenticated(); }
2.3、添加cors配置类
//配置预检请求通过 @Configuration public class CustomCorsConfigurationSource implements CorsConfigurationSource { @Override public CorsConfiguration getCorsConfiguration(HttpServletRequest request) { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOriginPattern("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); config.setAllowCredentials(true); config.setMaxAge(3600L); return config; } }