2011-11-22 2 views
1

사용자 인증과 함께 작동하지 않는 것은의 중요한 부분입니다 보안 설정은 :봄 권한 부여를 통해 주석이 DB에서 사용자 정의 인증 개체를 가져오고 여기에</p> <pre><code>SecurityContextHolder.getContext().setAuthentication(auth); </code></pre> <p>를 통해 그것을 설정하는 나는 우리의 필터로를 BasicAuthenticationFilter을 덮어 교체 한

:

<http use-expressions="true" entry-point-ref="authEntryPoint"> 
    <custom-filter position="BASIC_AUTH_FILTER" ref="basicProcessingFilter" /> 
    <intercept-url pattern="/**" access="hasRole('user')"/> 
</http> 
<beans:bean id="authEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
    <beans:property name="loginFormUrl" value="/login"/> 
</beans:bean> 
<global-method-security jsr250-annotations="enabled"/> 

또한 인증 프로세스가 이미 사용자 정의 필터에서 수행되기 때문에 단순히 어떤 조합입니다 내 자신의 AuthenticationProvider에 제공

@Override 
public Authentication authenticate(Authentication authentication) throws AuthenticationException { 
    logger.info("user:" + authentication.getPrincipal() + " pw:" + authentication.getCredentials()); 
    authentication.setAuthenticated(false);   
    return authentication; 
} 

@Override 
public boolean supports(Class<? extends Object> authentication) { 
    return MyAuthentication.class.isAssignableFrom(authentication); 
} 

이제 Spring은 시작시 모든 메소드에 대해 필요한 역할을 올바르게 인쇄하므로 주석이 올바르게 감지됩니다. 예 : 삭제 방법에 대한 '관리'의 역할 :

2011-11-22 11 : 47 : 09,474 [주] 디버그 org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource - 추가 보안 방법 [CacheKey [com.somecompany. SomeClass; public com.somecompany.ReturnType com.somecompany.SomeClass.delete()]] 속성이있는 경우 [admin]

그러나 사용자가이 역할을하는 경우 Spring은 어떤 식 으로든 확인하지 않습니다. 대신 보안 컨텍스트 xml 파일의 http 태그에 정의 된 전역 패턴으로 돌아갑니다. 그래서 예. 역할의 사용자로이 삭제 메소드에 액세스하면 [ "user"] http 태그에 hasRole ('user')이 있기 때문에이를 수락합니다.

아마도 DefaultFilterInvocationSecurityMetadataSource 개체를 초기화 할 때 delete 메서드에 대한 특정 규칙으로 채워지지 않을 것이므로 잘못된 것입니다. addSecureUrl 메소드를 통해 HTTP 태그 정의 규칙 만 추가됩니다.

무엇이 잘못 될 수 있습니까? 내가 클래스를 '스캔'컨텍스트 (즉, 내 응용 프로그램 컨텍스트)에 스프링 보안 컨텍스트에서

<global-method-security jsr250-annotations="enabled"/> 

이동

답변