12

春に春のセキュリティを使用するWebアプリケーションがあります。アプリケーションを実行しようとすると、

This webpage has a redirect loop

これは、これsecurity-context.xmlを追加した後、この例外が発生するだけです

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

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

    <!-- HTTP security configurations -->
    <http use-expressions="true">
        <form-login login-processing-url="/resources/j_spring_security_check"
            login-page="/login" authentication-failure-url="/login?login_error=t" />
        <logout logout-url="/resources/j_spring_security_logout" />
        <intercept-url pattern="/**" access="isAuthenticated()" />
        <intercept-url pattern="/login*" access="permitAll()" />
        <intercept-url pattern="/resources/**" access="permitAll()" />

    </http>

    <!-- Configure Authentication mechanism -->
    <authentication-manager alias="authenticationManager">
        <authentication-provider>
            <user-service>
                <user name="admin" password="admin" authorities="RIGHT_LIST,RIGHT_CANCEL,RIGHT_CREATE,RIGHT_UPDATE" />
                <user name="antony" password="antony" authorities="RIGHT_LIST,RIGHT_CANCEL,RIGHT_CREATE,RIGHT_UPDATE" />
                <user name="rod" password="rod" authorities="RIGHT_LIST,RIGHT_CREATE"/>
            </user-service>
        </authentication-provider>
    </authentication-manager>

    <global-method-security secured-annotations="enabled" pre-post-annotations="enabled">
        <expression-handler ref="expHandler"/>
    </global-method-security>

    <b:bean id="expHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
        <b:property name="permissionEvaluator">
            <b:bean  class="com.anto.springsec.security.CreateContactPermissionEvaluator"/>
        </b:property>
    </b:bean>

</b:beans>

login.jsp が 1 つと createContact.jsp がもう 1 つある

これは私のホームコントローラーです:

package com.anto.springsec.controllers;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    /**
     * Simply selects the home view to render by returning its name.
     */
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String home(Locale locale, Model model) {
        logger.info("Welcome home! The client locale is {}.", locale);

        Date date = new Date();
        DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);

        String formattedDate = dateFormat.format(date);

        model.addAttribute("serverTime", formattedDate );

        return "login";
    }

}

これを解決するのを手伝ってください。

4

2 に答える 2

13

ここでは順序intercept-urlが重要だと思います。あなたの/**パターンも飲み込ん/loginでいるよう/resourcesです。

これを試して:-

<http pattern="/resources/**" security="none"/>
<http pattern="/login" security="none"/>

<http use-expressions="true">
    <form-login login-processing-url="/resources/j_spring_security_check"
        login-page="/login" authentication-failure-url="/login?login_error=t" />
    <logout logout-url="/resources/j_spring_security_logout" />
    <intercept-url pattern="/**" access="isAuthenticated()" />
</http>

この構成は、私の既存のプロジェクトの 1 つと非常によく似ています。

アップデート

これは、現在プロジェクトで使用している構成です:-

<security:http pattern="/resources/**" security="none"/>
<security:http pattern="/login" security="none"/>
<security:http pattern="/error/**" security="none"/>

<security:http auto-config="true">
    <security:form-login login-page="/login"
                         authentication-failure-url="/login?login_error=1"
                         default-target-url="/"
                         always-use-default-target="true"/>
    <security:logout logout-success-url="/"/>
    <security:intercept-url pattern="/**" access="ROLE_USER"/>
</security:http>

03-19-13

securityタグで属性を使用するにはhttp、Spring Security 3.1 が必要です...参照http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#new- 3.1ns

于 2013-03-19T01:48:19.270 に答える
2

これを試して

変化する

<intercept-url pattern="/login*" access="permitAll()" />

<intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 

また

<intercept-url pattern="/login*" access="isAnonymous()" />

式が true であるため、 isAnonymous() を使用する必要があると思います

ドキュメントを見る

匿名ユーザーがログイン ページのすべてのリクエストを利用できるように、intercept-url 要素を使用します。そうしないと、リクエストはパターン /** に一致し、ログイン ページ自体にアクセスできなくなります。これは一般的な構成エラーであり、アプリケーションで無限ループが発生します。ここから続きを読む

于 2013-03-19T05:29:23.620 に答える