2014-03-26 3 views
0

저는 시도해 보았지만 스프링 보안 주석 작업을 수행 할 수없는 것처럼 보입니다. 나는 많은 사이트를 참조했는데 내 코드가 무엇이 잘못된지 알 것 같다. 어떤 도움이 많이 여기 스프링 보안 주석이 작동하지 않습니다.

<security:global-method-security pre-post-annotations="enabled"/> 
<security:http auto-config="true" use-expressions="true"> 
    <security:intercept-url pattern="/login" access="permitAll" /> 
    <security:intercept-url pattern="/logout" access="permitAll" /> 
    <security:intercept-url pattern="/accessdenied" access="permitAll" /> 
    <security:intercept-url pattern="/**/*.css" access="permitAll" /> 
    <security:intercept-url pattern="/**/*.js" access="permitAll" /> 
    <security:intercept-url pattern="/**" access="hasRole('LANDING')" /> 
    <security:form-login login-page="/login" default-target-url="/landing" authentication-failure-url="/login" authentication-success-handler-ref="loginSuccesHandler" /> 
    <security:logout logout-success-url="/logout" /> 
</security:http> 

여기 내 web.xml을

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
<filter> 
    <filter-name>XSSFilter</filter-name> 
    <filter-class>simptex.my.core.security.filter.XSSFilter</filter-class> 
</filter> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>XSSFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/dispatcher-servlet.xml 
     /WEB-INF/application-security.xml 
    </param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<listener> 
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> 
</listener> 

입니다

@PreAuthorize("hasAuthority('ROLE_TELLER')") 
@RequestMapping(value = "/urlxxxx" , method = RequestMethod.GET) 
public String controlerMethod(HttpServletRequest req, HttpSession session) { 


    return "urlxxxx"; 
} 

답변

0

첫째 자바 코드의 샘플입니다 봄 보안 XML을 여기에

입니다 이해할 수있을 것이다 네가 잘못된 표현을 사용하고있는 것 같아. Spring 설명서 here에 따르면 hasAuthority() 표현식이 표시되지 않습니다. 그러나 hasRole() 표현이 있습니다. 따라서 귀하의 경우에는 특수 효과를 @PreAuthorize("hasRole('ROLE_TELLER')")으로 변경해야한다고 생각합니다.

둘째, 봄 문서 상태 :

, 명시 적으로 응용 프로그램 컨텍스트 보안 XML 구성 사용에 따라서

에서 다음을 PermissionEvaluator을 구성해야합니다() 표현 hasPermission을 사용하려면 빈 선언 :

<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler" /> 

그리고 security:global-method-security 정의를 l로 업데이트하십시오. 다음과 같은 내용이 있습니다 :

<security:global-method-security pre-post-annotations="enabled"> 
    <security:expression-handler ref="expressionHandler"/> 
</security:global-method-security> 

기본 스프링 보안 주석을 얻는 데 충분해야합니다.

관련 문제