2011-02-23 44 views
5

我在Spring控制器中使用以下方法来允许通过Ajax进行身份验证。它的工作原理,但似乎并没有创建一个cookie或任何认证持久化的东西。是否可以用Spring Security进行编程验证并使其持久化?

@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); 
    } 
} 

我需要做什么才能使认证持久化?

+0

马特 - 你有没有想过这一个?我正在尝试做同样的事情。想要从Spring Security论坛尝试下面的代码:http://forum.springsource.org/showthread.php?99183-Automatic-login-after-account-creation – les2 2011-07-19 14:35:18

+0

是的,请参阅以下评论和发布解决方案:http ://raibledesigns.com/rd/entry/implementing_ajax_authentication_using_jquery#comment-1300943308000 – 2011-10-06 15:56:42

回答

2

确保

  • 你有SecurityContextPersistenceFilter配置
  • 你是不是<security:http>标签的create-session属性设置为none
+0

我试着看着SecurityContextPersistenceFilter中的逻辑并复制它。我添加了对SecurityContextRepository的引用,并在验证用户身份后尝试调用saveContext()方法。仍然没有骰子。 – 2011-02-23 15:38:23

+0

以标准方式配置Spring Security过滤器链而不是模仿它会不会更容易?顺便说一句,注意'SecurityContextPersistenceFilter' javadoc:_这个过滤器必须在任何身份验证处理机制之前执行。身份验证处理机制(例如BASIC,CAS处理过滤器等)期望SecurityContextHolder在执行时包含有效的SecurityContext。这意味着上下文创建和存储应该在执行身份验证之前进行。 – 2011-02-24 07:13:24

+0

我已经成功地使用这种技术与j_security_check交谈,并使其与LoginService实现一样好。但是,我仍然面临着使HTTPS登录持续到HTTP的问题。我在GitHub项目中创建了一个j_security_check分支,试图让这个替代实现工作。 https://github.com/mraible/ajax-login/tree/j_security_check – 2011-02-25 04:29:14

相关问题