1

アプリで春のセキュリティを使用しています。今、私は機能を正しく機能させようとしています。ここに私のspring-security.xmlがあります:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
             http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
             http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/security
                        http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <context:component-scan base-package="core"/>

    <http auto-config="false" use-expressions="true">
        <intercept-url pattern="/views/**" access="permitAll"/>
        <form-login authentication-failure-handler-ref="loginFailure"
                    authentication-success-handler-ref="loginSuccess"/>
        <remember-me key="key"/>
        <logout
                invalidate-session="true"
                delete-cookies="true"/>

    </http>


    <authentication-manager>
        <authentication-provider>
            <password-encoder hash="md5"/>
            <jdbc-user-service data-source-ref="ds"
                               users-by-username-query="SELECT email, password, enabled FROM tuser WHERE email=?"
                               authorities-by-username-query="SELECT tuser, role_id FROM user_role WHERE tuser=?"/>
        </authentication-provider>
    </authentication-manager>

    <global-method-security pre-post-annotations="enabled" secured-annotations="enabled" />

</beans:beans>

ここに私のアプリコードがあります。jsp:

<form:form method="POST">

        <table>
            <tr>
                <td>User:</td>
                <td>
                    <input type="text" id="j_username"/>
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td>
                    <input type="password" id="j_password"/>
                </td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" id="_spring_security_remember_me"/>
                </td>
                <td>
                    <s:message code="RememberMe"/>
                </td>
            </tr>
            <tr>
                <td colspan='2'>
                    <input id="loginBtn" name="submit" type="button" onclick="ajaxLogin()" value="Войти"/>
                </td>
            </tr>
        </table>

    </form:form>

ajaxログインを行うjavascript:

function ajaxLogin() {
    $("#errorText").css('display', 'none');
    $('#loginBtn').attr('disabled', 'true');

    var user_name = $("#j_username").val();
    var user_pass = $("#j_password").val();
    var rememberMe = $("#_spring_security_remember_me").prop("checked");

    $.ajax({
        url:"../../j_spring_security_check",
        data:{ j_username:user_name, j_password:user_pass, _spring_security_remember_me:rememberMe},
        type:"POST",
        beforeSend:function (xhr) {

            xhr.setRequestHeader("login-ajax", "true");
        },
        success:function (result) {

            if (result == "ok") {
                window.location.reload()
            } else {
                $("#errorText").css('display', 'block');
            }

        },
        error:function (XMLHttpRequest, textStatus, errorThrown) {
            return false;
        }
    })
    ;
}

問題は、ログインフォームでremeber meオプションをチェックしなくても、春がユーザーを覚えていることです。構成ファイルから削除すると、覚えていません。このパラメータが存在すると、スプリングはこのように動作しますか? 記憶機能を制御するにはどうすればよいですか? 前もって感謝します!

4

1 に答える 1

1

タグ logout のプロパティ delete-cookies="true"

<logout delete-cookies="true"/>

ブール型ではありません Cookie ファイル名のコンマ区切りリストです

タグで私を覚えています

<remember-me/>

トークンが有効な秒数を決定するプロパティ token-validity-seconds が存在します

例えば

<remember-me key="key" token-validity-seconds="2419200" />   

1ヶ月という意味

おそらく、初めてログインしてこのログアウトした後、トークンは削除されておらず、まだ存在していますが、タグを削除すると

<remember-me/>

それは機能せず、すべてが正しい

于 2012-10-21T12:08:10.223 に答える