gpt4 book ai didi

grails - SpringSecurity : how to specify remember me authentication?

转载 作者:行者123 更新时间:2023-12-02 14:20:12 26 4
gpt4 key购买 nike

我正在开发一个基于 Grails 和 Vaadin 7 的应用程序。我设法让它们与 SpringSecurity 一起用于身份验证和授权,但我必须开发自己的服务来调用 Spring Security 身份验证管理器以使其与 Vaadin 一起使用:

class SecurityService {

static transactional = true

def springSecurityService
def authenticationManager

void signIn(String username, String password) {
try {
def authentication = new UsernamePasswordAuthenticationToken(username, password)
SCH.context.authentication = authenticationManager.authenticate(authentication)
} catch (BadCredentialsException e) {
throw new SecurityException("Invalid username/password")
}
}
}

问题是现在我需要实现 remember me身份验证,我不知道从哪里开始。

如何制作 authenticationManager知道我想让它使用 remeberMeAuthentication ?我可以从登录 View 上的复选框中获取一个 bool 值,但接下来我该怎么做呢?

最佳答案

由于您的问题是针对来自登录页面的复选框值(记住我标志)的处理,因此答案是您必须调用 loginSuccessloginFail RememberMeServices的方法| . loginSuccess在响应中添加自动登录 cookie 和 loginFail删除该 cookie。

但我想上面的答案对你没有多大帮助,除非你确定你有 RememberMeServices在您的应用程序中配置。也许遵循配置 RememberMeServices 的步骤将帮助您按照自己的方式完成所有工作(或帮助您了解开箱即用的功能):

(1) 创建一个实现RememberMeServices的类(称为myRememberMeServices)和 LogoutHandler .

(2) 在autoLogin方法,解析cookie值后创建一个认证对象(UsernamePasswordAuthenticationToken)。

(3) 在loginFail方法,取消cookie。

(4) 在loginSuccess方法,创建一个自动登录cookie。添加您将在 autoLogin 方法中使用的值。通常 cookie 值是加密的。

(5) 在logout方法,取消cookie。

(6) 在以下四个地方注入(inject) myRememberMeServices 并调用适当的方法:

(a) At the time of successful login (if checkbox value is set),     
(b) At the time of failed login,
(c) On logout, and
(d) In filter that does autologin

值得注意的是 RememberMeAuthenticationFilter需要 authenticationManagerRememberMeServices在它的构造函数中。

对您的另一个问题的回答是 authenticationManager不需要知道任何关于记住我的事情。需要了解 authenticationManager 的过滤器(或任何处理自动登录的类)和 RememberMeServices . (换句话说,向 RememberMeServices 索要一个 token 并将其传递给 authenticationManager 以进行自动登录)。

关于grails - SpringSecurity : how to specify remember me authentication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16009206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com