2013-03-19 12 views
12

Ho un'applicazione web in primavera, che utilizza la protezione primavera, quando provo a excute l'applicazione si diceQuesta pagina web ha generato un loop di reindirizzamento in applicazione primavera-sicurezza

This webpage has a redirect loop 

questo è il mio security-context.xml dopo l'aggiunta di questo solo ottengo questa eccezione

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

ho uno login.jsp e uno più createContact.jsp

questa è la mia casa controler:

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

} 

per favore aiutatemi a risolvere questo.

risposta

13

credo che l'ordine di intercept-url è importante qui, e sembra che il vostro modello /** sta inghiottendo /login e /resources troppo.

Prova questo: -

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

Questa configurazione è molto simile a uno dei miei progetti esistenti.

UPDATE

Questa è la configurazione Attualmente sto usando nel mio progetto: -

<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

Per poter utilizzare l'attributo security in Tag http, è necessario Spring Security 3.1 ... vedere http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#new-3.1-ns

+0

Ricevo un'eccezione quando utilizzo le impostazioni di configurazione –

+0

Ho aggiornato il post in alto con la mia configurazione effettiva dal mio progetto. – limc

+0

Più annotazioni trovate su questa riga: \t - cvc-complex-type.3.2.2: L'attributo 'sicurezza' non può apparire nell'elemento 'http'. \t - cvc-complex-type.2.4.a: il contenuto non valido è stato trovato a partire dall'elemento 'http'. Uno di –

2

Prova questa

cambiamento

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

a

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

O

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

Come avete espressione vera penso yo u have a utilizzare isAnonymous()

See docs

elemento intercetta-url a dire che eventuali richieste di pagina di login dovrebbero essere disponibili per gli utenti anonimi. Altrimenti la richiesta verrebbe abbinata al pattern/** e non sarebbe possibile accedere alla stessa pagina di login! Questo è un errore di configurazione comune e genererà un ciclo infinito nell'applicazione. Read more from here

Problemi correlati