2012-06-20 123 views
1

我在Grails 2.0.3中使用Spring Security Plugin,並試圖在每個頁面的標題中添加一個登錄表單,如果用戶沒有登錄。點擊我的登錄按鈕,它會嘗試將POST發送給控制器操作,該操作沒有任何代碼來處理請求。下面是我在做什麼使用Spring Security Plugin在Grails中自定義登錄表格

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 /視圖/佈局/ 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 /博客/%2fmyblog%2fj_spring_security_check」 的失敗。我認爲這是因爲BlogPostController的主頁操作不知道如何處理該請求。

任何想法我做錯了什麼?

謝謝!

回答

0

我發現改變

<g:form> 

<form> 

解決了這個問題。不知道爲什麼GSP表單標籤正在這樣做,但使用普通的舊元素起作用。

+0

哦,沒有注意到你正在使用'g:form'。當然,對於這個URL你不需要這個標籤。 –

+3

'/ j_spring_security_check'端點沒有作爲Grails控制器動作來實現,因此你不能在'g:form'的'action'屬性中使用它。對於URL,使用'uri'attribute:' ...' –

2

它必須是/j_spring_security_check,只有這個URL會被Spring Security過濾器處理(如果你當然沒有改變這個設置的話)。似乎resource生成錯誤的網址,我看不出有任何理由在此使用它。

嘗試的${createLink(uri: '/j_spring_security_check'}代替${resource('file': 'j_spring_security_check')}

+0

這沒有奏效。它仍然嘗試將POST張貼到無效路徑。 – erturne

+0

你現在有什麼道路? –

相關問題