私は JAXRS Web サービスに取り組んでおり、認証と承認の両方を導入する必要があります。承認部分は簡単ですが、認証方法について頭を悩ませようとしています。認証が何であるかは知っていますが、実装を探しているか、独自のものを作成しています。Spring のセキュリティについて読んだことがありますが、それらのソリューションの多くは XML 構成を必要とするため、ゼロ XML 構成を使用します。私はそれが難しい注文であることを知っています。しかし、これまでのところ、認証までは良好です。これが私の Jetty スターターです。
package com.example.app.web;
import com.example.app.context.Config;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
public class JettyStarter {
public static void main( final String[] args ) throws Exception {
Server server = new Server(8080);
final ServletHolder servletHolder = new ServletHolder(new CXFServlet());
final ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.addServlet(servletHolder, "/app/*");
context.addEventListener(new ContextLoaderListener());
context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
context.setInitParameter("contextConfigLocation", Config.class.getName());
server.setHandler(context);
server.start();
server.join();
}
}
私の Config クラスも同様に XML フリーです。
@Configuration
@ComponentScan("com.example.app")
public class Config {
@Bean(destroyMethod = "shutdown")
public SpringBus cxf() {
return new SpringBus();
}
@Bean
public JaxRsApiApplication jaxRsApiApplication() {
return new JaxRsApiApplication();
}
// etc...
}
ここで、ある種の認証フェーズにフックしたいと考えています。XML でプログラミングしないことを意味するのであれば、独自の認証を実行してもかまいません。しかし、API ルートがヒットする前に認証を確認したいことを Spring に通知するにはどうすればよいでしょうか? この質問は理にかなっていますか?
追加の複雑さとして、ヘルスチェックのようなルートは認証を必要としませんが、アカウントの作成、ユーザー情報の更新などの実際のことを行うルートには認証が必要です。完璧なシナリオでは、nginx を Java アプリケーション サーバー (Jetty) の前に配置し、必要に応じてリバース プロキシを配置しています。nginx に Cookie を含むリクエストに関するすべてを教えてもらうことができると思いますので、これは可能であるはずです。助けていただければ幸いです。