Grails,Spring安全核心-从应用程序中删除/login/auth
我在Grails应用程序中安装了springsecuritycore,并使用Grails,Spring安全核心-从应用程序中删除/login/auth,grails,spring-security,Grails,Spring Security,我在Grails应用程序中安装了springsecuritycore,并使用s2 quickstart进行了设置。我希望“/”处理登录和注销操作。对我来说,这意味着未登录的用户只能访问根页面,而不能访问其他页面。实际上,除了“/”之外的所有内容都应该对没有角色“role\u ADMIN”的用户进行阻止 我在根页面上添加了登录表单,并在Config.groovy中设置了以下配置: grails.plugin.springsecurity.auth.loginFormUrl = '/' grails
s2 quickstart
进行了设置。我希望“/”处理登录和注销操作。对我来说,这意味着未登录的用户只能访问根页面,而不能访问其他页面。实际上,除了“/”之外的所有内容都应该对没有角色“role\u 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\u 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”
。为什么?提前谢谢
/login/auth
之所以有效,是因为UrlMappings中的“/$controller/$action?/$id?”
映射。因此,所有控制器都自动映射。一个选项是删除它,但这意味着您必须显式映射所有控制器。这有好处,grails.org应用程序使用这种方法
您不能取消映射一个自动映射的控制器,但是您可以将它重新映射到发送404的某个对象,这对用户来说是相同的。一种方法是使用Grails过滤器,例如运行Grails创建过滤器站点
,并将其放入SiteFilters中。groovy
:
package com.foo.bar
class SiteFilters {
def filters = {
loginUnmap(uri: '/login/**') {
before = {
response.status = 404
false
}
}
}
}
我不是100%确定布局问题,但我认为问题在于元标记是由SiteMesh专门处理的。对页面进行分析以确定要使用的布局,然后GSP的一部分被合并到布局中,因此使用运行时标记(如
)可能无法正常工作,这对我来说并不奇怪。不确定如何最好地禁用默认的/login/auth
映射,但要将//code>映射到登录页面,您可以将此行添加到UrlMappings
:“/”(控制器:“登录”,操作:“身份验证”)
对于#2,默认的SpringSeclogin/auth.gsp
视图应用主布局。@Andrew Addin UrlMappings对我没有任何更改。我更改了URL,但它根本不会将我重定向到索引。它仍然呈现为/login/auth/page。一切开始看起来像我必须更改LoginController…最后,我删除了额外的URL映射,并更改了auth.gsp。现在看起来:一切似乎都很好,但我无法访问布局中的${flash.messages},但可能是我做错了什么。Spring Security默认使用flash.message
(no“s”)。布局是在插件实现内部定义到auth.gsp文件中的。我指的是您的
标记。我怀疑如果你查看源代码,两个标签都会在那里,它会使用第一个标签。