2015-10-03 63 views
0

我的应用程序这个URL映射:Grails的春季安全RequestMap不匹配/

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

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

当某个用户有权查看/或/ app/index登录时,该应用显示一条消息:“对不起,您无权查看此页面。”,所以由于某种原因,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 [email protected]: 
Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; 
credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN 
auth [email protected]: 
Principal: [email protected]: 
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 

仅供参考,我的定制登录使用的用户+传球+组织,这就是为什么有一个UserPassOrgAuthToken而不是标准的UsernamePasswordAuthenticationToken

编辑

我也有rejectIfNoRule =真实defaultTargetUrl =“/应用/索引”,不知道这是什么影响:

grails.plugin.springsecurity.rejectIfNoRule = true 
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/app/index' // "/" is mapped to "/app/index" 

回答

0

看来我不能确保“/”,谷歌上搜索了几天,有没有确保“/”的例子。

我所做的是:

  1. 变化,从 “/” 到 “/应用/索引” 的mappging为 “/” 到 “/登录”
  2. 保持刚刚新RequestMap(网址:'/app/index',configAttribute:'ROLE_ADMIN')。save()

因此,在未登录的情况下访问应用程序会将我重定向到“/ login”。 如果我访问“/”正在登录,它将重定向到“/ app/index”(defaultTargetUrl)。

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