我已将":spring-security-ui:1.0-RC1"
放入我的BuildConfig
并编译它然后我使用spring ui命令创建了auth, register and securityInfo
视图和控制器。我还将用户放在我的数据库中进行测试。
但是,当我测试它时,我只是进入登录页面,登录后我进入了grails页面。但是按钮Register New User and Forgotten Passoword
不起作用,我只会被重定向到login
页面!即使文件正确呈现为*.html
。
这是视图结构的样子:
我的ÙRLMappings
看起来像那样:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?(.${format})?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
}
}
我很感激你对我的问题的回答!
更新
这是我的auth.gsp
:
<html>
<head>
<title><g:message code='spring.security.ui.login.title'/></title>
<meta name='layout' content='register'/>
</head>
<body>
<p/>
<div class="login s2ui_center ui-corner-all" style='text-align:center;'>
<div class="login-inner">
<form action='${postUrl}' method='POST' id="loginForm" name="loginForm" autocomplete='off'>
<div class="sign-in">
<h1><g:message code='spring.security.ui.login.signin'/></h1>
<table>
<tr>
<td><label for="username"><g:message code='spring.security.ui.login.username'/></label></td>
<td><input name="j_username" id="username" size="20" /></td>
</tr>
<tr>
<td><label for="password"><g:message code='spring.security.ui.login.password'/></label></td>
<td><input type="password" name="j_password" id="password" size="20" /></td>
</tr>
<tr>
<td colspan='2'>
<input type="checkbox" class="checkbox" name="${rememberMeParameter}" id="remember_me" checked="checked" />
<label for='remember_me'><g:message code='spring.security.ui.login.rememberme'/></label> |
<span class="forgot-link">
<g:link controller='register' action='forgotPassword'><g:message code='spring.security.ui.login.forgotPassword'/></g:link>
</span>
</td>
</tr>
<tr>
<td colspan='2'>
<s2ui:linkButton elementId='register' controller='register' messageCode='spring.security.ui.login.register'/>
<s2ui:submitButton elementId='loginButton' form='loginForm' messageCode='spring.security.ui.login.login'/>
</td>
</tr>
</table>
</div>
</form>
</div>
</div>
<script>
$(document).ready(function() {
$('#username').focus();
});
<s2ui:initCheckboxes/>
</script>
</body>
</html>
答案 0 :(得分:3)
您可能需要在grails.plugin.springsecurity.controllerAnnotations.staticRules
中添加以下两条规则。它位于Config.groovy
文件中。
'/register/index': ['permitAll'],
'/register/forgotPassword': ['permitAll'],
否则,spring security会将您的请求恢复到login / auth屏幕。
答案 1 :(得分:1)
你的控制器怎么样?我没有提到你在配置文件中包含它们的内容。
定义你的成功处理程序并定义一个成功登录的控制器。
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/homePage'
然后,如果您已经登录,则使用安全注释或使用InterceptMapURL
设置对控制器的访问权限。
看看你的问题,你刚刚没有配置安全插件就好了。那么看看github中grails的其他一些Spring安全实现,我认为这对你有帮助。
答案 2 :(得分:1)
只需将匿名角色添加到RegisterController
即可import grails.plugin.springsecurity.annotation.Secured;
@Secured(['ROLE_ANONYMOUS'])
class RegisterController extends grails.plugin.springsecurity.ui.RegisterController {
}