应用场景:
jwt token 用于前后端分离架构,适用于前后端分离,手机app端
跨域代码解决
WebSecurityConfigurerAdapter{
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*");
}
};
}
}
在WebSecurityConfigurerAdapter方法中加入corsConfigurer bean ,你会发现加入这行代码时程序依然不起作用。corsConfigurer 不起作用,前端依然是跨域问题.(原因:CORS 头缺少 'Access-Control-Allow-Origin')
corsConfigurer没有注入进去
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf().disable()// We don't need CSRF for JWT based authentication
.exceptionHandling()
.authenticationEntryPoint(this.authenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(FORM_BASED_LOGIN_ENTRY_POINT).permitAll()
.antMatchers(GXLX_SCORE_ENTRY_POINT).permitAll()
.and()
.authorizeRequests()
.antMatchers(TOKEN_BASED_AUTH_ENTRY_POINT).authenticated();
}
原因在于.cors() 这方法没有被调用,CorsConfigurer没有被应用。 写到这里你发去发现http里面根本没有这个方法,why。因为你的版本太低了。升级pom.xml中spring-boot的版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>