我正在尝试使用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)
}
希望这有帮助
答案 0 :(得分:1)
我认为有些事情需要改变。
首先,不要在preauth过滤器中发送重定向,只需返回null即可。 preauth过滤器仅用于通过在AuthenticationUserDetailsService的实现中实现以下方法来返回AuthenticationUserDetailsService可用于创建UserDetails对象的主题。
public UserDetails loadUserDetails(AbstractAuthenticationToken token) {
return createUserFromSubject((Subject) token.getPrincipal());
}
其次,将表单登录页面设置为配置的一部分。如果没有主题,这将用于重定向。
<form-login login-page="http://url_youwanttoredirect_to_on_auth_req" authentication-failure-url="http://url_youwanttoredirect_to_on_auth_req"/>