2014-09-18 6 views
1

내 시로 애플리케이션에서 REST를 제외한 모든 경로에 AuthenticationFilter을 정의하려고합니다.Shiro Path Pattern exclude

/rest/...은 그렇지 않습니다. 내가 Shiro-Guice 사용하고

그래서 내 필터 설정 내가 개미 경로 패턴 스타일에 대해 this question 보았다 형태

addFilterChain("/rest/**" ,restFilter) 
addFilterChain("/**", filter) //I want this one to work on everything except my rest filter 

의하지만 정규 표현식에 대한 지원이있을 것 같지 않습니다.

+0

:

가 나는 guice에서 어떻게 작동하는지 모르겠지만, shiro.ini에서 당신은 같은 것을 수행 할 수 있습니다

[main] myfilter = UrlBasedAuthzFilter restFilter = YourRestFilterClass [urls] /rest/** = restFilter /** = myfilter 

그리고 필터 클래스를 기본 'AntPathMatcher'를 사용해도 상자 밖에서 작동합니다. Shiro는 체인 내의 필터뿐만 아니라 필터 체인에 대해서도 [first match wins] (http://shiro.apache.org/web.html#urls-) 정책을 사용합니다. –

답변

3

이렇게하면 안됩니다. shiro가 작동하는 방식은 필터가 구성된 순서대로 필터를 확인하는 것입니다. 먼저 첫 번째 필터를 검사하고 인증 할 수없는 경우 다음 필터로 이동합니다. 거기에 대한 제외 패턴이 없습니다.

휴식 URL에서 자동 오류를 거부하는 사용자 지정 필터를 작성할 수 있습니다. 당신이 요구하는지 무엇

public class UrlBasedAuthzFilter extends AuthorizationFilter { 

    @Override 
    public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException { 
     if (request.getServletContext().getContextPath().startsWith("/rest"){ 
      return false; 
     } 
     return super.isAccessAllowed(request, response, mappedValue); 
    } 
} 
+1

그래서 당신이 할 수있는 것으로 밝혀졌습니다. 필터의 패턴 매처를'Ant' 매처 대신'RegexPatternMatcher'로 변경할 수 있습니다. 그럼 당신은 단지 자바 정규식을 사용할 수 있습니다. 나는 아직도 당신의 방법을 선호한다. – user2573153

+0

아, 그 생각을하지 못했습니다. 좋은 발견! – Wouter