2012-01-10 10 views
5

this guide(残念ながらドイツ語)に続いて、私のspring + hibernate + spring-securityとtiles2 - "HelloWorld"アプリケーションを動作させようとしています。j_spring_security_check 404 issue

私の問題は、アプリケーションにログインするときに「404」というエラーメッセージが表示されることです。ログインページへのリダイレクトは意図どおりに機能しますが、ログインボタンを押すと "http://localhost:8080/App/j_spring_security_check"に届きません。

<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> 

データベース接続がO.K.のようです...

<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ファイルはこのようになります:

私のweb.xmlはこのように見えます

私はすでに多くのグーグルをしていたので、誰かが私にヒントを与えることができたら非常にうれしいですが、解決策はまだ見つかりませんでした。

私はspring 3.1とtomcat 7.0.23を使用します。

+0

"j_security_check"または "j_spring_security_check"を意味しますか?あなたはここにいます... –

+0

申し訳ありません、それはj_spring_security_checkです – xSNRG

+0

そのリクエストのデバッグログ出力を確認し、Spring Securityが処理していることを確認してください。フィルターチェーンを通過したことの詳細レポートが表示されます。 –

答えて

0

あなたの設定はokです。 0xが存在しないコントローラーまたはビューを指している場合は、404の場合があります。

URL /office/kunden.htmlが機能することを確認してください。セキュリティの問題を解決してください(ちょうど<security:intercept-url pattern="/**" access="permitAll" />を追加してください)。

もう一つ間違っているかもしれないのは、このチュートリアルは3.0用ですが3.0用ではないということです。私はこれが原因だとは思っていませんが、試してダウングレードしてください。

+0

これが最初にやったことですが、セキュリティの制限を解除してください。同じ問題。たぶんあなたは正しいとダウングレードが役立ちます。 – xSNRG

+0

どのリクエストが404を引き起こしているのかを明確にすることはできますか?あなたは、ログからそれを動作させることができ、ブラウザーから送信された要求を監視することができます(例えば、Firebugを使用して)。 –

+0

@xSNRG:もし同じ問題が出てバネのセキュリティが可能ならば、問題は 'kunden'コントローラやビューに関連しています。 - 'kunden'コントローラがセキュリティの後に実装されているように見えるので、最後まで指導を実装しましたか? – Ralph

2

私は二つのことを確認します:

  1. リクエスト派遣

が要求発送はちょうどアプリケーションは、サーブレット・コンテナ内でアクセス可能であることを確認してください確認するには春のセキュリティ設定最初の場所。意味は、http://localhost:8080/App/j_spring_security_checkです。あなたのアプリケーションはそのURLの下でアクセス可能ですか? http://localhost:8080/Appは適切なコンテンツ(HTTP 200)を表示していますか? ディスパッチャサーブレットが正しく設定されていることを確認してください。それは春、セキュリティを経由して検討されてしまう前に

あなたのweb.xmlにそれを提供していない場合は
<!-- 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> 

、その後、あなたの要求をしても正常に派遣されない場合があります:あなたが提供しているチュートリアルでは、このセクションがあります。

これはあなたに役立つ場合は、これを試してください。

documentationに続いて、設定が正しいかどうかを確認するのに十分な最小構成にする必要があります。チュートリアルに従っていれば、春のセキュリティが適切に起動しないような小さなミス(typeoなど)が発生する可能性があります。その後、ロガー出力のエラー情報をスキップするのは簡単です。 次のことをお勧めします。

  1. applicationContext-security.xmlを変更して、ドキュメントに記載されている最小限の設定をサポートしてください。あなたは適切な応答を取得する場合
  2. 起動し、アプリケーションとはhttp://localhost:8080/App/j_spring_security_check

に行く - あなたが行われるまで、設定を変更してみてください。本当にSpringのIoCのが管理し、いくつかの他のフィルタに要求を委任されたん 何DelegatingFilterProxy(web.xmlに定義された)学ぶため

ポイント。このフィルタは、セキュリティ名前空間を介してapplicationContext-securityに定義されています。これが何らかの理由で動作しない場合、フィルタは初期化されず、残りのアプリケーションが適切に起動するという事実にかかわらず、HTTP 404を見ることになります。同じ症状に直面している人々のために)

0

が、異なる状況のため、SSLオフロードを行い、ロードバランサの背後にいる人たちは、以下の答えはであなたを置くかもしれません。

Uffff、テキストの多くは、右方向。私も同様の問題がありましたが、応答スプリングセキュリティがdefault-target-url属性(httpsの代わりにhttpで始まる)で定義された絶対URLにリダイレクトを送信すると、着信リクエストが正しく処理されたことが判明しました。

今すぐクライアントブラウザがHTTPのリダイレクト先を開こうとすると、(のみHTTPSトラフィックを受け入れる)ロードバランサーに失敗し、404 NOT FOUND

を報告する私たちは、ポート上のすべての着信要求のために、以下のmod_headerディレクティブを追加することで、この問題を解決しましたロードバランサの443(https):

RequestHeader set X-Forwarded-Proto "https"

追加のヘッダーが追加されます。 Jettyのようなアプリケーションサーバーを実行すると、このヘッダーが認識され、着信要求が変換されます。 (http://www.gossamer-threads.com/lists/apache/users/407272を参照)