簡體   English   中英

j_spring_security_check 404問題

[英]j_spring_security_check 404 issue

我試圖讓我的spring + hibernate + spring-security和tiles2 - “HelloWorld”應用程序工作,遵循本指南 (不幸的是它在德語)。

我的問題是登錄我的應用程序時收到“404”錯誤消息。 重定向到登錄頁面按預期工作,但是當我點擊登錄按鈕時,我無法訪問“ http:// localhost:8080 / App / j_spring_security_check ”。

我的web.xml看起來像這樣:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/defs/applicationContext.xml
        /WEB-INF/defs/applicationContext-security.xml
    </param-value>
</context-param>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name> 
  <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

和applicationContext-security.xml文件看起來這樣......

<http use-expressions="true">
    <intercept-url pattern="/index.html" access="permitAll" />
    <intercept-url pattern="/timeout.html" access="permitAll" />
    <intercept-url pattern="/redirect.html" access="permitAll" />
    <intercept-url pattern="/media/**" access="permitAll" />
    <intercept-url pattern="/includes/**" access="permitAll" />
    <intercept-url pattern="/office/**" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/office/admin/**" access="hasRole('ROLE_ADMIN')" />

    <form-login login-page="/index.html" 
            authentication-failure-url="/index.html?login_error=1"
            default-target-url='/office/kunden.html'
            always-use-default-target='true'
            />
    <logout logout-success-url="/index.html" />
    <remember-me />
    <session-management invalid-session-url="/index.html">
        <concurrency-control max-sessions="2" error-if-maximum-exceeded="true" />
    </session-management>
</http>

<authentication-manager>
    <authentication-provider>
        <jdbc-user-service data-source-ref="mysqldataSource" 
                    authorities-by-username-query="select username, authority from benutzer where username = ?"
                    users-by-username-query="select username, password, enabled from benutzer where username = ?"/>
    </authentication-provider>
</authentication-manager>

數據庫連接似乎沒問題

如果有人能給我一個提示,我會很高興,因為我已經做了很多谷歌搜索,但還沒有找到解決方案。

我使用spring 3.1和tomcat 7.0.23

我會檢查兩件事:

  1. 請求發送
  2. Spring-security配置

要檢查請求分派,請確保首先在servlet容器中訪問您的應用程序 意思是,你提到了http:// localhost:8080 / App / j_spring_security_check 您的應用程序可以在該URL下訪問嗎? http:// localhost:8080 / App是否顯示正確的內容(HTTP 200)? 還要確保正確配置了調度程序servlet 在您提供的教程中,有以下部分:

  <!--  Spring Hauptteil -->

  <servlet>
      <servlet-name>spring</servlet-name>
      <servlet-class>
          org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>spring</servlet-name>
      <url-pattern>*.html</url-pattern>
  </servlet-mapping>

如果您沒有在web.xml中提供它,那么在最終通過spring-security檢查之前,您的請求可能甚至無法正確發送。

如果這對您沒有幫助,請試試這個。

以下文檔中 ,最小配置應足以檢查您的設置是否正確。 如果你已經按照教程,你可能會犯一些小錯誤(例如,typeo)會導致spring-security無法正常啟動。 然后很容易在logger輸出中跳過一些錯誤信息。 我建議你做以下事情。

  1. 更改applicationContext-security.xml以支持文檔中提供的最小配置。
  2. 啟動應用程序並轉到http:// localhost:8080 / App / j_spring_security_check

如果您得到正確的響應 - 請嘗試修改配置,直到完成為止。

要點學習 DelegatingFilterProxy (在web.xml中定義)真正做的是將請求委托給Spring的IoC管理的其他過濾器。 此過濾器通過安全命名空間在applicationContext-security中定義。 如果由於某種原因這不起作用,過濾器將不會被初始化,並且您最終可能會看到http 404而不管其他應用程序是否正常啟動。

Uffff,很多文字;)

對於那些面臨相同症狀,但針對不同情況的人,那些在負載平衡器后面進行SSL卸載的人,以下答案可能會讓您朝着正確的方向前進。 我有一個類似的問題,結果是傳入的請求處理正確,但是作為響應彈簧安全性發送重定向到絕對URL,該URL由default-target-url屬性定義(以http而不是https開頭)

<security:form-login login-page="/login.jsp" default-target-url="/index.jsp" authentication-failure-url="/login.jsp?error=true" />

現在,客戶端瀏覽器嘗試在http上打開重定向的位置,在loadbalancer上失敗(僅接受https流量)並報告404 NOT FOUND

我們通過在負載均衡器中為端口443(https)上的所有傳入請求添加以下mod_header指令來解決此問題:

RequestHeader set X-Forwarded-Proto "https"

這將添加一個額外的標題。 如果您運行Jetty之類的應用程序服務器,它將識別此標頭並轉換傳入的請求。 (見http://www.gossamer-threads.com/lists/apache/users/407272

您的配置看起來不錯。 如果default-target-url='/office/kunden.html'指向不存在的控制器或視圖,則404的一個例子就是如此。

檢查url /office/kunden.html有效 - 因此停用安全性內容(只需添加<security:intercept-url pattern="/**" access="permitAll" /> )並嘗試使用它。

另一件可能出錯的事情是,本教程是針對spring 3.0而不是spring 3.0。 我不希望這是原因,但試試並降級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM