我正在尝试使用 Spring Security Grails 插件进行 PreAuthentication。我阅读了下面给出的预认证文档,但找不到适合我情况的具体内容 http://static.springsource.org/spring-security/site/docs/3.0.x/reference/preauth.html
在我的情况下,我们有一个代理,它解析 SAML 请求并在成功验证后给出一个映射。建议使用这个罐子。因此,我扩展了 AbstractPreAuthenticatedProcessingFilter 并尝试这样做
@Override
protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
userInfo = agent.readToken(request);
if (!userInfo){
WebUtils.retrieveGrailsWebRequest().getCurrentResponse().sendRedirect(ssoUrl)
}
return userInfo
}
我已将 myFilter 放在 src/groovy 下,并在 BootStrap 中注册了此过滤器
def init = { servletContext ->
SpringSecurityUtils.clientRegisterFilter(
'myFilter', SecurityFilterPosition.PRE_AUTH_FILTER.order)
}
它被正确加载,但过滤器没有发出重定向。首先,我想检查这是否是正确的方法,如果是,如何让重定向工作。
我在 grails 用户论坛上问过同样的问题
任何帮助是极大的赞赏。
更新:
对我有用的最终配置
按照建议编写了实现 AuthenticationUserDetailsService 的 MyAuthenticationService。您还必须定义包装您的自定义服务的 preAuthenticatedAuthenticationProvider
resources.groovy
securityFilter(MySSOAuthFilters){ bean ->
authenticationManager = ref('authenticationManager')
grailsApplication = ref('grailsApplication')
}
customUserDetailsService(MyAuthenticationService)
preAuthenticatedAuthenticationProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) {
preAuthenticatedUserDetailsService = ref('customUserDetailsService')
}
我无法这样做,<form-login>
因为在 Grails 中,这是使用 grails.plugins.springsecurity.auth.loginFormUrl 配置参数完成的,该参数只接受相对 url。
我最终做的是 grails.plugins.springsecurity.auth.loginFormUrl = '/login/index'
In LoginController
def index() {
if(springSecurityService.isLoggedIn()){
log.info("User is logged in")
return redirect(controller: 'mycontroller', action: 'list')
}
log.info("user is not logged in...redirect to sso.")
return redirect(url: ssoUrl)
}
希望这可以帮助