我刚刚开始学习Grails,但仍在努力解决这个问题。
在我的系统中,我有两种类型的 Controller ,常规 Controller 和休息 Controller 。
如果匿名用户在常规 Controller 中执行某项操作,则希望将该用户重定向到他将进行身份验证的CAS服务。然后,CAS应使用票证重定向回我的系统。给定票证,我必须要求非常相同的服务才能给我经过身份验证的实体的标识符(SSN)。拥有SSN后,我必须要求其他服务给我提供可以定义该用户权限的组。然后,我必须 checkin 第三项服务以获取有关该用户的所有其他信息,并在我的数据库中创建一个用户条目。完成所有这些操作并使整个过程顺利进行之后,用户的工作流程应继续进行。
如果针对其余 Controller 的操作执行了请求,则应返回403 header 的json格式错误。
整个事情都是无状态的。身份验证 token 应保留在 header 中, token 应存储在客户端。
我认为这是一种针对用户身份验证的自定义解决方案,而当我不喜欢automagic时,就是这种情况。
所以我现在在哪里。我在grails应用中添加了3个插件:
compile ":spring-security-core:2.0-RC4"
compile ":spring-security-cas:2.0-RC1"
compile ":spring-security-rest:1.4.1"
而且我有以下配置设置(域名被遮盖):
grails.plugin.springsecurity.userLookup.userDomainClassName = 'package.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'package.UserRole'
grails.plugin.springsecurity.authority.className = 'package.Role'
grails.plugin.springsecurity.cas.loginUri = '/login'
grails.plugin.springsecurity.cas.serverUrlPrefix = 'https://example.com'
grails.plugin.springsecurity.cas.proxyCallbackUrl = '${grails.serverURL}/secure/receptor'
grails.plugins.springsecurity.cas.serviceUrl ="/j_spring_cas_security_check"
但是我很确定我在这里和那里都缺少一些和平。
现在做什么?现在,未经授权的用户被重定向到/ auth / login,并且通常的spring安全登录表单向我打招呼进行身份验证。我希望我可以关闭这种行为。
首先,我想问一下,如何获得Spring Security将我重定向到CAS进行身份验证,而不是通常的身份验证。
其次,我想问一下如何解决可以在身份验证过程中实现自定义行为的问题。
第三,任何人都可以用两句话来解释 Spring 安全的过滤器和上下文到底是什么吗?也许有一些文章详细解释了整个过程的工作方式。
先感谢您
最佳答案
我找到了第一个问题的答案。
报告并讨论了一个错误:https://jira.grails.org/browse/GPSPRINGSECURITYCAS-4#issue-tabs
长话短说,一个人必须从cas插件参数中复制所有默认配置参数。这将导致cas插件正确初始化。
我将继续寻找其他两个的修复/说明。
关于rest - Grails CAS和REST设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210514/