Я пытаюсь создать свое первое приложение, используя Stormpath и Spring Boot. Я не могу найти, как добавить фильтр CORS в сервлет Stormpath. В результате мое приложение переднего конца не может получить токен аутентификации, потому что заголовок 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 для получения токена аутентификации? Можете ли вы описать, что вы пытаетесь достичь, и в чем проблема, которую вы видите? BTW, мы в настоящее время работаем над добавлением фильтра 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