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 では、これは相対 URL のみを受け入れる grails.plugins.springsecurity.auth.loginFormUrl 構成パラメーターを使用して行われるため、できませんでした。
私がやったことは、 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)
}
お役に立てれば