Grails Spring安全性用于不同形式的身份验证

时间:2013-05-02 08:41:47

标签: spring security grails

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

1 个答案:

答案 0 :(得分: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

希望这有帮助。