私はoauth2を実装したレストサーバを持っています。 POSTMANは良い動作しますが、私たちのangular2クライアントは文句を言わないので、コンソールに次の理由の仕事:SpringブートOauth2「アクセス制御が許可されたオリジン」エラー(サーバから401が返される)
アクセス制御チェックに合格しないプリフライトリクエストへの応答:いいえ 「アクセス制御は許起源」ヘッダが上に存在しますリクエストされた リソース。したがって、「http://localhost:4200」の原点は許可されません。 応答にはHTTPステータスコード401が含まれていました。
この問題は数時間にわたり読んできました。我々はそれを開始する方法をここで
@Component
public class CORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Authorization, Origin, Accept, Access-Control-Request-Method, Access-Control-Request-Headers");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
そして初期化子クラスで(もコメントオーバーライドメソッドを試してみました)
public class ZiftInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ZiftConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
/*
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
registerServletFilter(servletContext, new CORSFilter());
super.onStartup(servletContext);
}*/
@Override
protected Filter[] getServletFilters() {
Filter [] singleton = { new CORSFilter()};
return singleton;
}
}
そして最後に、ここにWebSecurityConfigurerAdapterを拡張する私たちのクラスは次のとおりです。私たちは、フィルタは以下のように実装されてい
@Configuration
@EnableWebSecurity
public class OAuth2SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Autowired
private ClientDetailsService clientDetailsService;
@Autowired
public void globalUserDetails(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource).usersByUsernameQuery("select username,password, enabled from User where username=?")
.authoritiesByUsernameQuery("select username, role from User_Roles where username=?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().anonymous().disable().authorizeRequests().antMatchers("/oauth/token").permitAll();
http.authorizeRequests().antMatchers("/oauth/token/").permitAll();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Bean
public TokenStore tokenStore() {
return new JdbcTokenStore(dataSource);
}
@Bean
@Autowired
public TokenStoreUserApprovalHandler userApprovalHandler(TokenStore tokenStore) {
TokenStoreUserApprovalHandler handler = new TokenStoreUserApprovalHandler();
handler.setTokenStore(tokenStore);
handler.setRequestFactory(new DefaultOAuth2RequestFactory(clientDetailsService));
handler.setClientDetailsService(clientDetailsService);
return handler;
}
@Bean
@Autowired
public ApprovalStore approvalStore(TokenStore tokenStore) throws Exception {
TokenApprovalStore store = new TokenApprovalStore();
store.setTokenStore(tokenStore);
return store;
}
}
何が問題なのですか?読んでいただきありがとうございます。
セキュリティコンフィグレーションに '@CrossOrigin(originins =" * ")'というアノテーションを付けましたか? –
はい、私は試してみましたが、助けがありませんでした... –