2013-03-19 1 views
12

i eine Web-Anwendung im Frühjahr haben die Feder Sicherheit verwendet, wenn ich versuche, um die Anwendung zu excute es sagtDiese Webseite weist eine Weiterleitung im Frühjahr-Sicherheitsanwendung

This webpage has a redirect loop 

das ist mein security-context.xml nach diesen nur das Hinzufügen ich erhalte diese Ausnahme

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

ich habe eine login.jsp und eine weitere createContact.jsp

dies meine Heimat controler ist:

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"; 
    } 

} 

bitte helfen Sie mir, dies zu lösen.

Antwort

13

Ich glaube, die Reihenfolge der intercept-url hier wichtig ist, und es scheint, wie Ihre /** Muster /login und /resources zu schluckt.

Versuchen Sie folgendes: -

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

Diese Konfiguration ist sehr ähnlich zu einem meiner bestehenden Projekte.

UPDATE

Dies ist die Konfiguration Ich bin derzeit in meinem Projekt mit: -

<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

Um security zu verwenden Attribute in http Tag, benötigen Sie Spring Security 3.1 ... siehe http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#new-3.1-ns

+0

Ich bekomme eine Ausnahme, wenn ich Ihre Konfigurationseinstellungen verwende –

+0

Ich aktualisierte meinen Beitrag oben mit meiner tatsächlichen Konfiguration von meinem Projekt. – limc

+0

Mehrere Anmerkungen in dieser Zeile: \t - cvc-complex-type.3.2.2: Das Attribut 'security' darf nicht im Element 'http' erscheinen. \t - cvc-complex-type.2.4.a: Ungültiger Inhalt wurde gefunden, beginnend mit Element 'http'. Einer von –

2

Versuchen

Änderung dieses

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

zu

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

ODER

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

Wie Sie Ausdruck wahr Ich denke, haben yo u haben isAnonymous zu verwenden()

See docs

Intercept-url Element zu sagen, dass alle Anträge auf der Login-Seite sollte für anonyme Benutzer verfügbar sein. Andernfalls würde die Anfrage mit dem Muster/** übereinstimmen und es wäre nicht möglich, auf die Login-Seite selbst zuzugreifen! Dies ist ein häufiger Konfigurationsfehler und führt zu einer Endlosschleife in der Anwendung. Read more from here