我正在开发一个JAXRS Web服务,我需要实现身份验证和授权。授权部分很简单,但我试图了解如何进行身份验证。请注意,我知道身份验证是什么,但我正在寻找实现,或者创建自己的身份验证。我已经阅读了有关Spring安全性的文章,但是很多这些解决方案都涉及XML配置,而我正在进行Zero 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编程,我不介意自己编写身份验证。但是如何通知Spring我想在api路由被命中之前检查身份验证?这个问题有意义吗?
作为一种额外的复杂性,像健康检查这样的路由不需要身份验证,而执行真实事务的路由(例如创建帐户,更新用户信息等)确实需要身份验证。在完美的场景中,我让nginx坐在我的Java应用服务器(Jetty)前面,并根据需要反向代理。我假设我可以让nginx告诉我有关请求的所有信息,包括cookie,所以这应该是可能的。非常感谢帮助!