2010-12-09 1 views
1

я побежал в следующей проблему с помощью пружинной безопасности 3.0.3 с футболкой 1.2:весна-безопасность и трикотаж: нет автоматического перенаправления на сайт входа

когда я аннотирование моего Джерси Ресурсов с @Secured или @PreAuthorize Аннотации, spring-security не позволяют авторизовать пользователь-агент на страницу входа, как я этого хочу. Забрасывается только AuthenticationCredentialsNotFoundException, а HTTP 500 возвращается пользователю-агенту вместо перенаправления на страницу входа в форму весны-безопасности. Кто-нибудь знает, почему эта проблема возникает?

Ресурс:

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

контекст:

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

Спасибо!

ответ

2

Это была проблема с Spring-security 3.0.3. После перехода на spring-security 3.0.5 все работает так, как ожидалось.

1

Может ли это быть связано с тем, что страница входа в систему была отфильтрована весной? Один из способов проверить бы попробовать добавить строку, подобную

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

не помогло:/ – fasseg 2010-12-14 14:10:49

1

добавить следующую Filer в 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> 

обновления файла контекста с:

<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

Сначала это похоже на конфигурацию для spring-security-2, а во-вторых, я хотел использовать внутренние сайты входа и выхода из Spring-security – fasseg 2010-12-14 14:11:48

Смежные вопросы