2010-12-09 4 views
1

ich in das folgende Problem lief mit feder Sicherheit 3.0.3 mit Jersey 1.2:feder Sicherheit & Jersey: keine automatische Umleitung auf die Login-Seite

, wenn ich mit Anmerkungen versehen meine Jersey-Ressourcen mit dem @Secured oder @PreAuthorize Anmerkungen, Spring-Security leitet den User-Agent nicht automatisch auf die Login-Seite, wie ich es möchte. Nur der AuthenticationCredentialsNotFoundException wird ausgelöst und ein HTTP 500 wird an den Benutzeragenten zurückgegeben, anstatt auf die Formularanmeldeseite von Spring-Security umzuleiten. Weiß jemand, warum dieses Problem auftritt?

Ressource:

@Path("/event") 
@Component 
public class EventResource extends AbstractBaseResource { 

    @Resource(name = "eventService") 
    private EventService eventService; 

    public void setEventService(EventService eventService) { 
     this.eventService = eventService; 
    } 

@GET 
@Path("/view/{id}") 
@Produces(MediaType.TEXT_HTML) 
@PreAuthorize("hasRole('ROLE_USER')") 
public Viewable viewEvent(@PathParam("id") long id) throws UnsupportedEncodingException, URISyntaxException{ 
      ... 
     } 
} 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" 
    version="3.0"> 
    <filter> 
     <filter-name>jersey</filter-name> 
     <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
      <param-value>/(static|images|js|css|(WEB-INF/views))/.*</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> 
      <param-value>/WEB-INF/views/</param-value> 
     </init-param> 
    </filter> 

    <filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 


    <filter-mapping> 
     <filter-name>jersey</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

    [...] 
</web-app> 

Kontext:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

    <context:annotation-config /> 
    <context:component-scan base-package="..." /> 
<context:mbean-export/> 

    <security:http auto-config="true" > 
    <security:form-login/> 
    <security:logout/> 
    </security:http> 

    <security:authentication-manager> 
     <security:authentication-provider ref="..." /> 
    </security:authentication-manager> 

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

    [...] 
</beans> 

Thank you!

Antwort

2

Dies war ein Problem mit Feder-Sicherheit 3.0.3. Nach dem Wechsel zu Feder-Sicherheit 3.0.5 funktioniert alles wie erwartet.

1

Könnte es daran liegen, dass die Anmeldeseite selbst von der Federsicherheit gefiltert wird? Eine Möglichkeit wäre zu prüfen, zu versuchen, das Hinzufügen einer Zeile ähnlich

<intercept-url pattern="/login.jsp*" filters="none"/> 
+0

hat nicht geholfen:/ – fasseg

1

die folgenden Filer in der web.xml

<filter> 
     <filter-name>Acegi Filter Chain Proxy</filter-name> 
     <filter-class>org.springframework.security.util.FilterToBeanProxy</filter-class> 
     <init-param> 

      <param-name>targetClass</param-name> 
      <param-value>org.springframework.security.util.FilterChainProxy</param-value> 
     </init-param> 
    </filter> 

Aktualisierung die Kontextdatei mit:

<security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY"/> 
<security:form-login login-page="/login.htm" 
          login-processing-url="/yourprocessingurl.do" 
          default-target-url="/index.htm" 
          authentication-failure-url="/login.htm" /> 
<security:logout logout-url="/logout" logout-success-url="/logout.jsp" /> 
<security:anonymous key="anonymous-security" /> 
+0

zuerst scheint dies eine Konfiguration für Frühjahr-Sicherheit-2 zu sein und zweitens wollte ich Spring-Security interne Login-und Logout-Sites verwenden – fasseg

Verwandte Themen