2009-07-16 2 views
1

HTTP 요청에서 오는 호출에 대해서만 인증/권한 부여를 실행하려고합니다.스프링 소스가 다른 소스에서 호출 됨

인증/권한 부여를 사용하려는 컨트롤러의 메소드가 둘 이상의 소스에서 호출되었습니다. 이 경우 다른 컨트롤러에서 직접 호출하거나 직접 HTTP 요청으로 호출 할 수 있습니다.

다른 컨트롤러에서 온 전화의 인증/승인을 끌 수 있습니까?

아직 명확하지 않은 경우 더 자세히 읽으십시오.

컨트롤러 A에 doIt() 메소드가 있다고 가정 해 봅시다. 컨트롤러 A를 삽입하는 컨트롤러 B도 있습니다. 컨트롤러 B의 어느 시점에서 'a.doIt()'을 호출하지만 doIt()에 대한 HTTP 호출에서 doIt()을 호출 할 수도 있습니다. HTTP 호출에서 오는 호출 인 경우 인증/권한 부여를 테스트하려고하지만 컨트롤러 B에서 나온 호출은 테스트하지 않겠습니다.

답변

1

A의 보안 프록시가있는 B를 주입하고 있습니다. 프록시없이 A를 주입 할 수 없습니까?
콩 A는 프록시 :

<bean id="beanASecured" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="targetName" value="beanA"/> 
    <property name="interceptorNames"> 
    <value>securityInterceptor</value> 
    </property> 
</bean> 

secutiryInterceptor :

<bean id="securityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> 
    ... 
</bean> 

콩 A는 프록시되지 :

<bean id="beanA" class="com.A"/> 

빈 B이 빈 주사 'A 프록시되지 ':

<bean id="beanB" class="com.B"> 
    <constructor-arg ref="beanA"/> 
</bean> 
+0

할 방법이 있습니까? 나는 그렇게 생각하지 않는다. 그러나 이것이 실제로 나에게 가장 좋은 해결책이 될 것입니다. –

+0

모두 콩을 프록 싱하는 방법에 따라 다릅니다. 내 게시물을 편집하여 예제를 추가했습니다. – rodrigoap

+0

@Autowire 어노테이션을 사용하여 '

0

URL에서는 스프링 인증을 구성하고 메소드 호출에서는 구성하지 않아야합니다. 이것은 당신을 위해 작동합니다. 나는이 작업을 수행 할 수있는 방법이 표시되지 않습니다

+0

현재 유권자는 메서드에 대한 주석을 사용하여 해당 메서드에 필요한 권한 수준을 확인하므로 문제가 있습니다. 이것을 URL로 변경하면 (아마 XML 매핑으로) 많은 작업이 필요할 것입니다. 비록 내가 다른 해결책을 찾을 수 없다면,이 트릭을해야 할 것이다. 감사! –

+0

메소드 레벨 권한 부여가 사용된다면 그걸 피할 ​​방법이 없습니다. URL 권한 부여는 동일한 설정을 사용하여 수행해야 할 설정을 일부만 사용하므로 작업량은 많지 않습니다. –

0

, 내 생각 엔 그냥 doitDirectCall (..) 같은 두 번째 방법을 가지고해야합니다입니다 실제 다른 컨트롤러 호출과 작은 동전 (..) get은 HTTP 요청에서 호출됩니다.