gpt4 book ai didi

grails - Grails 3 Spring Security预身份验证

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

我在工作中的应用程序使用Grails3。我正在尝试进行此article中所述的预身份验证,但是由于我无法弄清楚如何禁用grails 3 spring security plugin提供的常规身份验证而遇到了困难。

这是我当前的情况:用户A点击了我的网页。我想解析请求的 header ,并取出角色和用户名信息。如果用户名或角色为空,我会将用户重定向到某个网关。简单来说,我想通过调用插件提供的静态规则,仅将spring安全性用于授权。即

grails.plugin.springsecurity.controllerAnnotations.staticRules = [
[pattern: '/serviceb/**', access: "hasAnyRole('ROLE_COOL','ROLE_UNCOOL')"],
[pattern: '/cools/**', access: ['ROLE_ADMINS']],
[pattern: '/*', access: 'isAuthenticated()']
]

这就是我 不需要并不需要spring安全来执行任何登录功能的原因,正如 first article所述,我们只能将其用于身份验证。

我尝试了什么:

首先,我删除了application.groovy文件(运行插件快速入门时默认创建)中的所有与身份验证相关的调用,即连接字符串,搜索过滤器,但 不是静态规则

接下来,我尝试使用由这两篇文章提供的解决方案: on stack和this on blog

我创建了一个过滤器以扩展AbstractPreAuthenticatedProcessingFilter
package Cool.service.authentication
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter
import javax.servlet.http.HttpServletRequest

class CGAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter {
@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { "username" }

@Override
protected Object getPreAuthenticatedCredentials(HttpServletRequest request) { "N/A" }
}

我的启动配置现在看起来像这样:
import grails.plugin.springsecurity.SecurityFilterPosition
import grails.plugin.springsecurity.SpringSecurityUtils

class BootStrap {

def init = { servletContext ->
SpringSecurityUtils.clientRegisterFilter('CGAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER.order)
}
}

我的Spring资源如下所示:
import Cool.service.authentication.CGAuthenticationFilter

beans = {
myAuthenticationFilter(CGAuthenticationFilter) {
authenticationManager = ref('authenticationManager')
checkForPrincipalChanges = true
}
}

最后,将这一行添加到spring安全插件的application.groovy配置中:
grails.plugin.springsecurity.providerNames = ['preAuthenticatedAuthenticationProvider', 'anonymousAuthenticationProvider']

但是,尝试运行应用程序时出现父类(super class)错误,其中服务器“启动失败”,并且java返回非零值。这使我相信我朝着错误的方向前进,而实现完全是错误的

最佳答案

为了解决该问题,我不得不更改一些文件。首先,我的Bootstrap文件现在包含以下init块:

SpringSecurityUtils.clientRegisterFilter('requestHeaderAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER)

我的bean(resources.groovy)文件现在包含:
userDetailsService(grails.plugin.springsecurity.userdetails.GormUserDetailsService) {
grailsApplication = ref('grailsApplication')
}

userDetailsByNameServiceWrapper(org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper) {
userDetailsService = ref('userDetailsService')
}

preAuthenticatedAuthenticationProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) {
preAuthenticatedUserDetailsService = userDetailsByNameServiceWrapper
}

requestHeaderAuthenticationFilter(Cool.service.authentication.GCHeaderAuthenticationFilter) {
authenticationManager = ref('authenticationManager')
}

除此之外,其余配置都是正确的。

关于grails - Grails 3 Spring Security预身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36865029/

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