Java 是否可以通过编程方式使用Spring Security进行身份验证并使其持久化?
我在Spring控制器中使用以下方法来允许通过Ajax进行身份验证。它可以工作,但它似乎不会创建cookie或任何使身份验证持久化的东西Java 是否可以通过编程方式使用Spring Security进行身份验证并使其持久化?,java,security,spring,spring-security,Java,Security,Spring,Spring Security,我在Spring控制器中使用以下方法来允许通过Ajax进行身份验证。它可以工作,但它似乎不会创建cookie或任何使身份验证持久化的东西 @RequestMapping(method = RequestMethod.POST) @ResponseBody public LoginStatus login(@RequestParam("j_username") String username, @RequestParam("j_password")
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public LoginStatus login(@RequestParam("j_username") String username,
@RequestParam("j_password") String password) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
try {
Authentication auth = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(auth);
return new LoginStatus(auth.isAuthenticated(), auth.getName());
} catch (BadCredentialsException e) {
return new LoginStatus(false, null);
}
}
我需要做什么才能使身份验证持久化?确保
- 您已经配置了
SecurityContextPersistenceFilter
- 您没有将
标记的
属性设置为create session
none
SecurityContextPersistenceFilter
javadoc:此过滤器必须在任何身份验证处理机制之前执行。身份验证处理机制(例如基本、CAS处理筛选器等)希望SecurityContextHolder在执行时包含有效的SecurityContext。这意味着上下文创建和存储应该在执行身份验证之前进行。我已经成功地使用此技术与j_security_check进行了交谈,并使其与LoginService实现一样工作。然而,在让HTTPS登录持久化到HTTP时,我仍然面临同样的问题。我在GitHub项目中创建了一个j_security_check分支,以尝试让这个替代实现正常工作。马特-你有没有想过这个?我现在正试图做同样的事情。要从Spring安全论坛中尝试此代码:是的,请参阅以下注释和帖子以了解解决方案: