Grails Spring 安全 RequestMap 不匹配 /
Grails Spring Security RequestMap not matching /
我的应用有这个 url 映射:
"/"(controller: 'app', action: 'index')
我正在使用域 class 将 RequestMap 实例存储在数据库中。
对 app/index 的访问仅限于某些角色,因此当用户点击 / 或 /app/index 时,将显示登录表单。
当有权查看 / 或 /app/index 的用户登录时,应用程序会显示一条消息:"Sorry, you're not authorized to view this page.",因此对于出于某些原因 Spring 安全部门没有考虑我的 RequestMaps。
我尝试了很多组合,也许我遗漏了什么。我现在拥有的是 (Bootstrap.groovy):
new RequestMap(url: '/', configAttribute: 'ROLE_ADMIN').save()
new RequestMap(url: '/app/index', configAttribute: 'ROLE_ADMIN').save()
new RequestMap(url: '/**', configAttribute: 'ROLE_ADMIN').save()
我用来登录的用户已分配 ROLE_ADMIN,这是控制台登录:
userDetails grails.plugin.springsecurity.userdetails.GrailsUser@586034f:
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN
auth com.cabolabs.security.UserPassOrgAuthToken@40a3c9e2:
Principal: grails.plugin.springsecurity.userdetails.GrailsUser@586034f:
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN;
Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN
仅供参考,我将登录自定义为使用 user+pass+organization,这就是为什么使用 UserPassOrgAuthToken 而不是标准的 UsernamePasswordAuthenticationToken
编辑
我还有 rejectIfNoRule = true 和 defaultTargetUrl = '/app/index',不确定这是否有影响:
grails.plugin.springsecurity.rejectIfNoRule = true
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/app/index' // "/" is mapped to "/app/index"
看来我无法保护“/”,google 了好几天也没有保护“/”的例子。
我所做的是:
- 将映射从“/”更改为“/app/index”,将“/”更改为“/login”
- 保留刚刚新的 RequestMap(url: '/app/index', configAttribute: 'ROLE_ADMIN').save()
因此,在未登录的情况下访问该应用程序会将我重定向到“/login”。
如果我访问正在登录的“/”,它会重定向到“/app/index”(defaultTargetUrl)。
这是预期的行为,但我不得不删除当用户访问我的网络根目录“/”时显示仪表板的要求,现在我的用户看到“/app/index”而不是“/” URL.
我的应用有这个 url 映射:
"/"(controller: 'app', action: 'index')
我正在使用域 class 将 RequestMap 实例存储在数据库中。 对 app/index 的访问仅限于某些角色,因此当用户点击 / 或 /app/index 时,将显示登录表单。
当有权查看 / 或 /app/index 的用户登录时,应用程序会显示一条消息:"Sorry, you're not authorized to view this page.",因此对于出于某些原因 Spring 安全部门没有考虑我的 RequestMaps。
我尝试了很多组合,也许我遗漏了什么。我现在拥有的是 (Bootstrap.groovy):
new RequestMap(url: '/', configAttribute: 'ROLE_ADMIN').save()
new RequestMap(url: '/app/index', configAttribute: 'ROLE_ADMIN').save()
new RequestMap(url: '/**', configAttribute: 'ROLE_ADMIN').save()
我用来登录的用户已分配 ROLE_ADMIN,这是控制台登录:
userDetails grails.plugin.springsecurity.userdetails.GrailsUser@586034f:
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN
auth com.cabolabs.security.UserPassOrgAuthToken@40a3c9e2:
Principal: grails.plugin.springsecurity.userdetails.GrailsUser@586034f:
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true;
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN;
Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_ADMIN
仅供参考,我将登录自定义为使用 user+pass+organization,这就是为什么使用 UserPassOrgAuthToken 而不是标准的 UsernamePasswordAuthenticationToken
编辑
我还有 rejectIfNoRule = true 和 defaultTargetUrl = '/app/index',不确定这是否有影响:
grails.plugin.springsecurity.rejectIfNoRule = true
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/app/index' // "/" is mapped to "/app/index"
看来我无法保护“/”,google 了好几天也没有保护“/”的例子。
我所做的是:
- 将映射从“/”更改为“/app/index”,将“/”更改为“/login”
- 保留刚刚新的 RequestMap(url: '/app/index', configAttribute: 'ROLE_ADMIN').save()
因此,在未登录的情况下访问该应用程序会将我重定向到“/login”。 如果我访问正在登录的“/”,它会重定向到“/app/index”(defaultTargetUrl)。
这是预期的行为,但我不得不删除当用户访问我的网络根目录“/”时显示仪表板的要求,现在我的用户看到“/app/index”而不是“/” URL.