Spring Security UI - 无法打开注册/忘记密码页面

时间:2013-12-20 21:42:12

标签: grails spring-security grails-2.0

我已将":spring-security-ui:1.0-RC1"放入我的BuildConfig并编译它然后我使用spring ui命令创建了auth, register and securityInfo视图和控制器。我还将用户放在我的数据库中进行测试。

但是,当我测试它时,我只是进入登录页面,登录后我进入了grails页面。但是按钮Register New User and Forgotten Passoword不起作用,我只会被重定向到login页面!即使文件正确呈现为*.html

这是视图结构的样子:

enter image description here

我的Ù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>

3 个答案:

答案 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 {
}