アプリケーションが REST API と Web アプリケーションをホストするユース ケースがあり、REST API のみにカスタム ヘッダーを追加する必要があります。REST API は、Spring Data REST を通じて有効になります。通常、サーブレット フィルターを使用してこれを実現できますが、REST API へのリクエストを分離するロジックをコーディングし、カスタム ヘッダーを追加する必要があります。Spring Data REST API が、生成するすべてのレスポンスにデフォルト ヘッダーを追加できるようにするとよいでしょう。あなたの考えは何ですか?私が怠け者だとは言わないでください:)
質問する
5397 次
3 に答える
8
実際の実装の詳細を探している人々のために..
インターセプター
public class CustomInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("adding CORS headers.....");
response.addHeader("HEADER-NAME", "HEADER-VALUE");
return true;
}
}
Java 構成
@Configuration
public class RepositoryConfig extends
RepositoryRestMvcConfiguration {
@Override
public RequestMappingHandlerMapping repositoryExporterHandlerMapping() {
RequestMappingHandlerMapping mapping = super
.repositoryExporterHandlerMapping();
mapping.setInterceptors(new Object[] { new CustomInterceptor() });
return mapping;
}
}
于 2013-10-29T19:29:40.210 に答える
4
Spring Data REST は Spring MVC の上に構築されているため、最も簡単な方法は、参照ドキュメントHandlerInterceptor
で説明されているようにカスタムを構成することです。
Spring Data REST を使用する最も簡単な方法は、 を拡張RepositoryRestMvcConfiguration
してオーバーライドrepositoryExporterHandlerMapping
し、親メソッドを呼び出し….setInterceptors(…)
てから呼び出すことです。
于 2013-10-09T07:38:31.910 に答える
1
最後に、spring-data-rest 2.4.1.RELEASE でも動作するカスタム インターセプターのセットアップを行うことができました。
@Configuration
public class RestMvcConfig extends RepositoryRestMvcConfiguration {
@Autowired UserInterceptor userInterceptor;
@Autowired ApplicationContext applicationContext;
@Override
public DelegatingHandlerMapping restHandlerMapping() {
RepositoryRestHandlerMapping repositoryMapping = new RepositoryRestHandlerMapping(resourceMappings(), config());
repositoryMapping.setInterceptors(new Object[] { userInterceptor }); // FIXME: not nice way of defining interceptors
repositoryMapping.setJpaHelper(jpaHelper());
repositoryMapping.setApplicationContext(applicationContext);
repositoryMapping.afterPropertiesSet();
BasePathAwareHandlerMapping basePathMapping = new BasePathAwareHandlerMapping(config());
basePathMapping.setApplicationContext(applicationContext);
basePathMapping.afterPropertiesSet();
List<HandlerMapping> mappings = new ArrayList<HandlerMapping>();
mappings.add(basePathMapping);
mappings.add(repositoryMapping);
return new DelegatingHandlerMapping(mappings);
}
}
メソッドをオーバーライドし、そのrestHandlerMapping
コンテンツをコピーして貼り付け、repositoryMapping.setInterceptors
カスタム インターセプターを追加するための行を追加する必要がありましたUserInterceptor
。
もっと良い方法はありますか?
于 2015-12-16T22:37:09.847 に答える