Java:使用带有 Spring Security 的 Jersey Jax-RS 进行用户身份验证

Posted

技术标签:

【中文标题】Java:使用带有 Spring Security 的 Jersey Jax-RS 进行用户身份验证【英文标题】:Java: User Authenticate Using Jersey Jax-RS with Spring Security 【发布时间】:2014-08-30 07:41:22 【问题描述】:

我正在尝试使用 Jersey Jax-RS Api 和 Spring-Security 进行用户身份验证。但我能够做到这一点。 Jersey 提供了一些基本的身份验证方法,但我需要使用 spring-security。我正在尝试手动UserNamePassword 通过spring security 进行身份验证,但它抛出了空指针异常。以下是我的代码:

@Path(value = "/")
public class UserLoginApi 

@Autowired
private AuthenticationManager authenticationManager;

@POST
@Path(value = "test")
public void test() 
    System.out
            .println("Hello REST **************************************** ");


@POST
@Path(value = "login")
@Consumes(MediaType.APPLICATION_JSON)
public Response userlogin(User user, @Context HttpServletRequest request) 
    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
            user.getUsername(), user.getPassword());
    Authentication authentication = authenticationManager.authenticate(authenticationToken);
    User user2 = (User) SecurityContextHolder.getContext();
    System.out.println(user2);
    return Response.status(200).entity("OK").build();


在此代码中,authenticationManager 为 null,因此它引发了异常。有没有另一种方法可以做到这一点?或者使用球衣Spring-Security 是不可能的?

请提供一些方法来做到这一点。

谢谢

【问题讨论】:

【参考方案1】:

如果你想在你的项目中使用 Spring Security,你应该使用 AbstractAuthenticationProcessingFilter -> docs

并覆盖 attemptAuthentication 方法。 在此方法的主体中,您将能够从 HttpRequest 获取您的用户名和密码。

请记住使用 spring-security.xml 文件配置您的 spring 安全性。

稍后在您的控制器 UserLoginApi 中,您将能够检查您的用户是否使用 SecurityContextHolder.getContext().getAuthentication() 成功验证。

另见类:

org.springframework.security.web.authentication.AuthenticationFailureHandler

org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler

org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint

【讨论】:

以上是关于Java:使用带有 Spring Security 的 Jersey Jax-RS 进行用户身份验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Security 和 Redis 对带有 Java 配置的 RESTFul api 进行基于 Cookie 的身份验证

带有标准 java 应用程序的 Spring Security SAML

使用带有 Spring Security 的 SAML 进行单点登录 (SSO)

带有路径变量和蚂蚁匹配器的 Spring Security 自定义方法

Spring-security /login 重定向

Spring Security:简单的保护一个SpringBoot应用程序(总结)