22

j_spring_security_logout を使用してアプリケーションのログ出力をセットアップしようとしていますが、何らかの理由で機能せず、404 エラーが発生し続けます。

私は次のように関数を呼び出しています:

<a href="<c:url value="/j_spring_security_logout"/>"><img border="0" id="logout" src="./img/logout.png" /></a>

アプリケーションのメイン ページは WebContent/jsp/ にあり、ログイン ページとログアウト ページは WebContent/login/ にあります。

私はこの他の投稿Spring security's logoutの問題もチェックしましたが、そこにある解決策は私にとってはうまくいきません。

ここで私の web.xml を見ることができます

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

そしてここに私の spring-security.xml

<http auto-config="true">
    <intercept-url pattern="/*" access="ROLE_USER" />
    <form-login login-page="/login/login.jsp" 
                authentication-failure-url="/login/errorLogin.jsp"/>
    <logout logout-success-url="/" logout-url="/login/logout.jsp" />
</http>

<beans:bean id="myAuthenticationProvider" 
    class="myapp.web.authentication.WSAuthenticationProvider">
</beans:bean>

<authentication-manager>
    <authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>

前もって感謝します。

4

6 に答える 6

36

logout-urlは仮想URLを参照しているため、その名前のリソースは必要ありません。次のいずれかを実行できます。

<logout logout-success-url="/" logout-url="/j_spring_security_logout" />

そしてあなたのページのリンクはこのように

<c:url value="/j_spring_security_logout" var="logoutUrl" />
<a href="${logoutUrl}">Log Out</a>

またはこれ:

<logout logout-success-url="/" logout-url="/logout" />

そして次のようなリンク:

<c:url value="/logout" var="logoutUrl" />
<a href="${logoutUrl}">Log Out</a>

両方を混ぜていたので、404エラーが発生していました。

于 2012-06-16T08:23:59.933 に答える
29

csrf が有効になっているかどうかを確認します。csrf が有効になっている場合、post メソッドを使用してログアウトする必要があり、隠しフィールドとして csrf トークンを追加します。次に、JavaScript を使用してフォームをポストし、ログアウトします

于 2014-06-05T08:10:32.697 に答える
19

spring security 4では、フォーム ボタンからログアウトする必要があります。CSRF トークンを一緒に送信する必要があります。j_spring_security_logoutは機能しなくなりました。1日過ごした後、私は次のように働くようになりました。
ステップ 1: JSP ページで

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
    <input type="submit" value="Logout"/>
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>

ステップ2

<security:http use-expressions="true">
<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />
<security:logout logout-success-url="/login" invalidate-session="true" logout-url="/logout" />
</security:http>

ステップ 3ログイン コントローラで

//Logout mapping
@RequestMapping("/logout")
public String showLoggedout(){
    return "logout";
}

ステップ 4 logout.jsp が 1 つ必要です。

ログアウト後にログインページに移動することを確認することが重要です。

<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />

したがって、このログイン ページには、対応する login.jsp へのマッピングまたはコントローラでマッピングするものを指定する必要があります。

于 2016-03-26T20:00:16.790 に答える
0

また、コントローラーがどのように見えるかをここに示します

@RequestMapping("/logout")
    public String logoutUrl(){
        return "logout";
    }
于 2016-07-08T00:32:25.600 に答える
0

最初に security-context.xml に次のコードを設定します...

<security:logout logout-success-url="/"
            invalidate-session="true"  /> 

次に、このコードを jsp ファイルに追加します。

  <script>
        function formSubmit() {
            document.getElementById("logoutForm").submit();
        }
    </script>


<c:url var="logoutUrl" value="/logout" />        
  <a href="javascript:formSubmit()"> Logout</a>
</li>

<form action="${logoutUrl}" method="post" id="logoutForm">
    <input type="hidden" name="${_csrf.parameterName}"     value="${_csrf.token}" />
</form>
于 2016-10-16T19:26:42.690 に答える
0

JAVA ベースの Spring MVC 構成では、セキュリティ構成クラスで構成する必要があります。

@Override
protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http.servletApi().rolePrefix("");
    http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}

この回答は 2 倍になり、私の場合に取り組んでいます: Spring Security Java Config not generated logout url

于 2016-12-14T18:21:14.327 に答える