0

我正在开发一个 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 编程,我不介意滚动自己的身份验证。但是我如何通知 Spring 我想在 api 路由被命中之前检查身份验证?这个问题有意义吗?

作为一个额外的复杂性,像健康检查这样的路由不需要身份验证,而做真实事情的路由,例如创建帐户、更新用户信息等,则需要身份验证。在完美的场景中,我将 nginx 放在我的 Java 应用程序服务器 (Jetty) 前面,并根据需要进行反向代理。我假设我可以让 nginx 告诉我有关请求的所有信息,包括 cookie,所以这应该是可能的。非常感谢您的帮助!

4

0 回答 0