1

Grails2.0.3のSpringSecurityプラグインを使用しており、ユーザーがログインしていない場合は、各ページのヘッダーにログインフォームを追加しようとしています。ログインボタンをクリックすると、コントローラーにPOSTしようとします。リクエストを処理するためのコードが実際にはないアクション。これが私がしていることです

BlogPostController

class BlogPostController {

    static defaultAction = "home"

    /**
     * Summary of the most recent blog posts.
     */
    def home() {
        // snip
    }

    def show() {
        // snip
    }
}

UrlMappingsにはいくつかの追加エントリがあります

"/blog/$year/$month/$day/$title"(controller: "blogPost", action: "show")
"/blog/$action?/$id?"(controller: "blogPost")
"/"(controller:"blogPost")

grails-app / views / layout / main.gsp

<!doctype html>
<html lang="en" >
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><g:layoutTitle default="My Blog"/></title>
        <g:layoutHead/>
        <r:layoutResources />
    </head>
    <body>
        <g:render template="/banner" />
        <g:layoutBody/>
        <r:layoutResources />
    </body>
</html>

grails-app / views / _banner.gsp

<div id="banner">
    <r:img class="logo" dir="images" file="logo.png" />

    <div class="login">

        <sec:ifLoggedIn>
            <sec:username/>
        </sec:ifLoggedIn>

        <sec:ifNotLoggedIn>
        <g:form name="banner-login" method="POST" action="${resource('file': 'j_spring_security_check')}">
            <ul>
                <li>
                    <label for="j_username">Username:</label>
                    <g:textField name="j_username"/>
                </li>
                <li>
                    <label for="j_password">Password:</label>
                    <g:passwordField name="j_password"/>
                </li>
            </ul>
            <div class="button-panel">
                <g:submitButton name="banner-login-button" value="Log in" />
            </div>
        </g:form>
        </sec:ifNotLoggedIn>

    </div>

</div>

Config.groovy

grails.plugins.springsecurity.auth.loginFormUrl = '/'

ログインボタンをクリックすると、「/ myblog / blog /%2fmyblog%2fj_spring_security_check」に投稿しようとしますが、失敗します。BlogPostControllerのホームアクションがそのリクエストの処理方法を知らないためだと思います。

私が間違っていることについて何か考えはありますか?

ありがとう!

4

2 に答える 2

2

でなければなりません/j_spring_security_check。このURLのみがSpringSecurityフィルターによって処理されます(もちろん、この設定を変更しなかった場合)。間違ったURLをresource生成しているようですが、ここで使用する理由はありません。

${createLink(uri: '/j_spring_security_check'}代わりに試してください${resource('file': 'j_spring_security_check')}

于 2012-06-20T04:53:05.647 に答える
0

私はその変化を見つけました

<g:form>

<form>

この問題を解決しました。GSPフォームタグがそれを行っている理由はわかりませんが、単純な古い要素を使用しても機能します。

于 2012-06-20T12:25:22.793 に答える