2

我目前正在使用 grails 和 Spring 安全性来实现身份验证。没有做太多的定制,使用开箱即用,对于登陆 auth.gsp 的用户来说一切正常,他将在其中输入用户名/密码。现在我有一个正常流程的要求,将从外部站点打出到我们的站点。打出将提供用户名和密码作为参数。在打卡场景中,用户不应看到登录屏幕,而应使用 url 参数中提供的用户名/密码进行身份验证。这可能吗 ?我怎样才能在同一代码中实现这两者

4

1 回答 1

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

希望这可以帮助。

于 2013-05-02T10:01:28.347 回答