2013-05-02 81 views
1

我目前使用grails和Spring安全来实现身份验证。没有做太多的定制,使用开箱即用的 ,对于登陆auth.gsp的用户来说,一切正常,他将输入用户名/密码。 现在我有一个要求与正常流量一起,将有一个从外部网站冲到我们的site.punch out将有用户名和密码作为参数提供。 在冲出场景中,用户不应该看到登录屏幕,并应使用url参数中提供的用户名/密码进行身份验证。 这可能吗? 我该如何在相同的代码中同时获得这两项Grails针对不同形式的身份验证的Spring安全

回答

4

是的,您可以进行程序化登录。例如:

import org.springframework.security.authentication.AuthenticationManager; 
import org.springframework.security.core.context.SecurityContextHolder; 
.... 
AuthenticationManager authenticationManager; 
.... 
def login(String username, String password) { 
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(params.username, params.password); 
    User details = new User(params.username); 
    token.setDetails(details); 

    try { 
     //doing actual authentication  
     Authentication auth = authenticationManager.authenticate(token); 
     log.debug("Login succeeded!"); 
     //setting principal in context 
     SecurityContextHolder.getContext().setAuthentication(auth); 
     return true 
    } catch (BadCredentialsException e) { 
     log.debug("Login failed") 
     return false 
    } 
} 

这里你可以看到一些例如:http://raibledesigns.com/rd/entry/java_web_application_security_part3

希望这有助于。