0

スプリングセキュリティを設定しようとしています。検証に失敗した後、ログインページに転送するコントローラーがあります。しかし、私のインターセプトはそれを拾っていないようです...

コントローラーフラグメント:

if (validation not successful) {
   return "login";
}

私のxmlには次のものがあります:

<security:intercept-url pattern="/login*" access="ROLE_USER" /> 

しかし、これは失敗し、次のエラーが発生します。

要求されたリソース(/myapp/WEB-INF/jsp/login.jsp)は利用できません。

ログイン転送をインターセプトするにはどうすればよいですか?

4

1 に答える 1

4

ユーザーがまだログインしていない場合は、ユーザーがログインしていないことを意味するROLE_USERため、SpringSecurityはアクセスを許可しません/login

要素に追加use-expressions="true"<http>、切片線を次のように変更します。

<http use-expressions="true">
  <!-- ... -->
  <security:intercept-url pattern="/login*" access="permitAll" /> 

さらに、login.jspがの下にあることを確認して/WEB-INF/jsp/login.jspください。

コメント後に編集:

Spring Securityの設定がまったくないようですので、次のように始めます。

<http auto-config='true' use-expressions="true">
  <intercept-url pattern="/login*" access="permitAll"/>
  <intercept-url pattern="/**" access="ROLE_USER" />
  <!-- use login-page='/login' assuming you've got 
       Spring MVC configured to redirect to login.jsp -->
  <form-login login-page='/login'/>
</http>

または、Spring Security 3.1を使用している場合:

<http pattern="/login" security="none" />
<http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_USER" />
  <!-- use login-page='/login' assuming you've got 
       Spring MVC configured to redirect to login.jsp -->
  <form-login login-page='/login'/>
</http>

/WEB-INF/jsp/login.jspサンプルコンテンツを含むファイルを作成します。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Login Page</title>
</head>
<body>
    <h3>Login</h3>

    <c:if test="${not empty error}">
        <div class="errorblock">
            Your login attempt was not successful, try again.<br /> Caused :
            ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
        </div>
    </c:if>

    <form name='f' action="<c:url value='j_spring_security_check' />"
        method='POST'>

        <table>
            <tr>
                <td>User:</td>
                <td><input type='text' name='j_username' value=''>
                </td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type='password' name='j_password' />
                </td>
            </tr>
            <tr>
                <td colspan='2'><input name="submit" type="submit"
                    value="submit" />
                </td>
            </tr>
        </table>

    </form>
</body>
</html>

さらに、Spring Securityについて読んでください。これらは、このフレームワークの基本です。

于 2012-09-17T08:15:56.993 に答える