我正在尝试使用Jersey Jax-RS Api和Spring-Security进行用户身份验证。但我能做到这一点。 Jersey提供了一些基本的身份验证方法,但我需要使用spring-security。我正在尝试通过spring security手动UserName
和Password
进行身份验证,但它会抛出并返回空指针异常。 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
是不可能的?
请提供一些方法来做到这一点。
由于
答案 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