Grails Spring Security RequestMap不匹配/

时间:2015-10-03 18:44:44

标签: grails spring-security grails-plugin

我的应用有此网址映射:

"/"(controller: 'app', action: 'index')

我正在使用域类在数据库中存储RequestMap实例。 对app / index的访问仅限于某些角色,因此当用户点击/或/ app / index时,会显示登录表单。

如果用户有权查看/或/ app / index登录,则该应用会显示一条消息:"抱歉,您无权查看此页面。& #34; ,所以出于某种原因,Spring Security没有考虑我的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"

1 个答案:

答案 0 :(得分:0)

似乎我无法保证“/”,谷歌搜索几天,并没有确保“/".

的例子

我做的是:

  1. 将映射从“/”更改为“/ app / index”,将“/”更改为“/ login”
  2. 保留新的RequestMap(url:'/ app / index',configAttribute:'ROLE_ADMIN')。save()
  3. 因此,在未登录的情况下访问应用程序,将我重定向到“/ login”。 如果我访问“/”正在登录,它会重定向到“/ app / index”(defaultTargetUrl)。

    这是预期的行为,但是当用户访问我的网络根目录“/”时,我不得不删除显示仪表板的要求,现在我的用户在URL中看到“/ app / index”而不是“/”。