사용자 인증과 함께 작동하지 않는 것은의 중요한 부분입니다 보안 설정은 :봄 권한 부여를 통해 주석이 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"/>
이동는