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

时间:2014-07-09 10:17:41

标签: java rest spring-security jersey

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

@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 个答案:

答案 0 :(得分:2)

如果要在项目中使用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