私はStormpathとSpring Bootを使って最初のアプリケーションを構築しようとしています。 StormpathサーブレットにCORSフィルタを追加する方法が見つかりません。その結果、Access Control-Allow-Originヘッダーが存在しないため、フロントエンドのアプリケーションで認証トークンを取得できません。CorsFilter with Stormpath
ログを使用すると、CORSフィルタは、私が制御するメソッドで呼び出されますが、リクエスト/ oauth/tokenではなく、確実に呼び出されます。
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter {
private final Logger log = LoggerFactory.getLogger(SimpleCorsFilter.class);
public SimpleCorsFilter() {
log.info("SimpleCORSFilter init");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
log.debug("*********Enter Cors Filter***********");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
log.debug("******* Exit Cors Filter ****");
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
また、私はこのブログhttps://shuaib.me/stormpath-java-backend/にアプローチを試してみましたが、application.propertiesに以下の行を追加しました。
stormpath.web.accessToken.origin.authorizer.originUris = http://localhost:3002
stormpath.web.filters.cors = something.SimpleCorsFilter
stormpath.web.uris./logout = cors
stormpath.web.uris./register = cors
stormpath.web.uris./oauth/token = cors
は、私はまた、すべてのこれらの試みは、彼らが私のコントローラのメソッドのために働くではなく、同じ結果を持ってFilterRegistrationBean
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("http://localhost");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
を追加しようとしました、/ OAuthの/トークン要求のために。
最後に、この私のポンポン
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>stormpath-basic</groupId>
<artifactId>stormpath-basic</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<stormpath.version>1.1.1</stormpath.version>
</properties>
<dependencies>
<dependency>
<groupId>com.stormpath.spring</groupId>
<artifactId>stormpath-default-spring-boot-starter</artifactId>
<version>${stormpath.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
私は何かが足りないのですか?
なぜ認証トークンを取得するためにCORSフィルタが必要だと思いますか?あなたが達成しようとしていることとあなたが目にしている問題は何ですか?ところで、私たちは現在、CORsフィルタをスタックに追加しようとしています。ここでは、既存のコードをコピーしたい場合に備えて、既存のコードを見ることができます:https://github.com/stormpath/stormpath-sdk-java/pull/1001 – mario
私のフロントエンドがAngularで動作しません。私のマイクロサービスと同じURL。私は私のサービスで嵐の道を走ります。私のフロントエンドが[myserviceurl]/oauth/tokenにトークンを要求すると、トークンはCORSヘッダーを逃して拒否されます。 –
原点を 'stormpath.web.oauth2.origin.authorizer.originUris ='に追加するだけです。このためのCORSフィルタは不要です。ここをクリックしてください:https://docs.stormpath.com/java/servlet-plugin/appendix/web-stormpath-properties.html – mario