我在Grails应用程序中安装了Spring Security Core,并使用s2-quickstart
进行设置。我想'/'来处理登录和注销操作。对我来说,对于我来说,未登录的用户只能访问根页面而不能访问任何其他内容。实际上,除了'/'之外的所有内容都应该是没有角色'ROLE_ADMIN'的用户的阻塞。
我在根页面添加了登录表单,并在Config.groovy中设置了以下配置:
grails.plugin.springsecurity.auth.loginFormUrl = '/'
grails.plugin.springsecurity.auth.ajaxLoginFormUrl = '/'
grails.plugin.springsecurity.failureHandler.defaultFailureUrl = '/'
grails.plugin.springsecurity.failureHandler.ajaxAuthFailUrl = '/'
grails.plugin.springsecurity.logout.postOnly = false
grails.plugin.springsecurity.userLookup.userDomainClassName = 'adminpanel.security.SecUser'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'adminpanel.security.SecUserSecRole'
grails.plugin.springsecurity.authority.className = 'adminpanel.security.SecRole'
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
'/': ['permitAll'],
'/index': ['permitAll'],
'/index.gsp': ['permitAll'],
'/**/js/**': ['permitAll'],
'/**/css/**': ['permitAll'],
'/**/images/**': ['permitAll'],
'/**/favicon.ico': ['permitAll']
]
我在我的每个控制器上设置了@Secured(['ROLE_ADMIN'])
,并将这样的内容添加到我的index.gsp中:
<head>
<sec:ifAllGranted roles="ROLE_ADMIN">
<meta name="layout" content="main"/>
</sec:ifAllGranted>
<sec:ifNotGranted roles="ROLE_ADMIN">
<meta name="layout" content="login"/>
</sec:ifNotGranted>
<title>Home Page - Admin Panel</title>
</head>
有两个问题:
配置按我的预期工作,但是当我在浏览器中输入时:localhost:8080/AdminPanel/login/auth
页面仍然存在,即使是注销用户我也可以访问它。我想完全删除此URL,无论是登录还是注销,用户都无法访问它。
即使用户已注销,/login/auth
视图也会使用"main"
布局呈现,尽管事实上我在index.gsp中有上面提到的代码,应该更改布局到"login"
。为什么?
提前致谢!
答案 0 :(得分:3)
/login/auth
因UrlMappings中的"/$controller/$action?/$id?"
映射而有效。因此,所有控制器都是自动映射的。一种选择是删除它,但这意味着您必须显式映射所有控制器。这有好处,grails.org应用程序使用这种方法。
您无法取消映射自动映射控制器,但您可以将其重新映射到发送404的内容,这对用户来说是相同的。一种方法是使用Grails过滤器,例如运行grails create-filters site
并将其放入SiteFilters.groovy
:
package com.foo.bar
class SiteFilters {
def filters = {
loginUnmap(uri: '/login/**') {
before = {
response.status = 404
false
}
}
}
}
我不是100%肯定布局问题,但我认为问题是meta标签是由SiteMesh专门处理的。解析页面以确定要使用的布局,然后将部分GSP合并到布局中,因此使用像<g:if>
这样的运行时标记不会像您想要的那样工作并不奇怪。