【问题标题】:Grails+SpringSecurity+CAS doesn't redirect to targetUrl after Authentication认证后 Grails+SpringSecurity+CAS 不重定向到 targetUrl
【发布时间】:2017-02-12 04:08:30
【问题描述】:

我在 localhost 上设置了一个简单的 Grails 站点(使用 SSL),配置了 spring 安全性并使用 s2-quickstart 设置了用户。然后我将其配置为使用 CAS 服务器身份验证。根据 CAS 日志,它似乎确实进行了身份验证,但在身份验证之后,它会继续返回 grails 应用程序的 index.gsp 页面,而不是请求的 URL。这是application.groovy中的配置。

// Added by the Spring Security Core plugin:  
grails.plugin.springsecurity.userLookup.userDomainClassName = 'com.helloworld.SecUser'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'com.helloworld.SecUserSecRole'
grails.plugin.springsecurity.authority.className = 'com.helloworld.SecRole'

grails.plugin.springsecurity.providerNames = ['casAuthenticationProvider']

grails.plugin.springsecurity.cas.active = true
grails.plugin.springsecurity.cas.sendRenew = false
grails.plugin.springsecurity.cas.loginUri = '/login'
grails.plugin.springsecurity.cas.serviceUrl = 'https://localhost:8080/'
grails.plugin.springsecurity.cas.serverUrlPrefix = 'https://localhost:8443/cas'
grails.plugin.springsecurity.cas.serverUrlEncoding = 'UTF-8'
grails.plugin.springsecurity.cas.key = 'grails-spring-security-cas'
grails.plugin.springsecurity.cas.artifactParameter = 'ticket'
grails.plugin.springsecurity.cas.serviceParameter = 'service'
grails.plugin.springsecurity.cas.filterProcessesUrl = '/j_spring_cas_security_check'
grails.plugin.springsecurity.cas.proxyCallbackUrl = 'https://localhost:8080/secure/receptor'
grails.plugin.springsecurity.cas.proxyReceptorUrl = '/secure/receptor'
grails.plugin.springsecurity.cas.useSingleSignout = true


grails.plugin.springsecurity.cas.logout.afterLogoutUrl = 'https://localhost:8443/cas/logout?url=https://localhost:8080/logout'

grails.plugin.springsecurity.logout.postOnly = false

  grails.plugin.springsecurity.successHandler.alwaysUseDefaultTargetUrl = false

grails.plugin.springsecurity.interceptUrlMap = [
    '/js/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/css/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/images/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/login/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/logout/**': ['IS_AUTHENTICATED_ANONYMOUSLY'],
    '/secure/receptor': ['IS_AUTHENTICATED_ANONYMOUSLY'],  // <- allows CAS to contact the receptor
    '/**': ['IS_AUTHENTICATED_FULLY']
]

你能提出什么问题吗?

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

    嗯,grails.plugin.springsecurity.cas.serviceUrl 值应该以 /j_spring_cas_security_check 结尾。

    我们使用:

    grails.plugin.springsecurity.cas.active = true
    grails.plugin.springsecurity.cas.loginUri = "/login"
    grails.plugin.springsecurity.cas.serverUrlPrefix = "<cas server url>"
    grails.plugin.springsecurity.cas.serviceUrl = "<grails server url>/j_spring_cas_security_check"
    grails.plugin.springsecurity.cas.proxyCallbackUrl = null
    grails.plugin.springsecurity.cas.proxyReceptorUrl = null
    

    我还发现最初使用最少的配置来让事情正常运行很有帮助。我已经多次使用我认为从一开始就认为好的值的不同插件过度配置不同的插件,从而锁定了我的 grails 服务器。

    【讨论】:

    • 嗨,谢谢回复...我从 application.groovy 中删除了所有内容,除了上述内容和 spring security 的前三行。
    • 奇数。我将这些设置与部署在 localhost:8443/cas(我的 cas 服务器 url 值)的本地 Jasig CAS 服务器一起使用。 loginUri 就是“/login”。我们还设置了 grails.plugin.springsecurity.useSessionFixationPrevention = false。
    • 会不会和interceptUrlMap、controllerAnnotations或者filterChain.chainMap有关?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多