我的应用程序使用 Grails 3。我正在尝试进行预身份验证,如此处所述article https://docs.spring.io/spring-security/site/docs/3.0.x/reference/preauth.html,但是我遇到了困难,因为我不知道如何禁用由Grails 3 Spring 安全插件 http://grails-plugins.github.io/grails-spring-security-core/v3/index.html.
这是我当前的场景:用户 A 访问我的网页。我想解析请求的标头并取出角色和用户名信息。如果用户名或角色为空,我会将用户重定向到某个网关。简单来说,我只想通过调用插件提供的静态规则来使用 spring security 进行授权。 IE
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
[pattern: '/serviceb/**', access: "hasAnyRole('ROLE_COOL','ROLE_UNCOOL')"],
[pattern: '/cools/**', access: ['ROLE_ADMINS']],
[pattern: '/*', access: 'isAuthenticated()']
]
这就是我的原因do not需要 spring security 来执行任何登录功能,因为第一篇文章 https://docs.spring.io/spring-security/site/docs/3.0.x/reference/preauth.html状态,我们只能将其用于身份验证。
我尝试过的:
首先,我删除了 application.groovy 文件中的所有与身份验证相关的调用(在运行插件快速启动时默认创建),即连接字符串、搜索过滤器,但是not静态规则
接下来,我尝试使用这两篇文章提供的解决方案:on stack https://stackoverflow.com/questions/25897039/grails-pre-authenticated-scenario和这个on blog http://blog.serindu.com/2011/05/26/grails-spring-security-using-preauthenticated-authentication-provider/.
我创建了一个 Filter 来扩展 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']
然而,当我尝试运行应用程序时,我收到一个超级通用错误,其中服务器“无法”启动并且java返回一个非零值。这让我相信我正朝着错误的方向前进,并且实施完全错误