복붙노트

[SPRING] 스프링 보안 - 애플리케이션 컨텍스트에서 WebSecurityExpressionHandler 인스턴스를 찾을 수 없음

SPRING

스프링 보안 - 애플리케이션 컨텍스트에서 WebSecurityExpressionHandler 인스턴스를 찾을 수 없음

사용자가 인증 된 경우에만 JSP 페이지에 로그 아웃 링크를 표시하는 데 문제가 있습니다. 다음은 JSP 페이지의이 줄에있는 예외입니다.

<sec:authorize access="isAuthenticated()">

예외:

Stacktrace:
....

root cause

javax.servlet.jsp.JspException: No visible WebSecurityExpressionHandler instance could be found in the application context. There must be at least one in order to support expressions in JSP 'authorize' tags.
    org.springframework.security.taglibs.authz.AuthorizeTag.getExpressionHandler(AuthorizeTag.java:100)
    org.springframework.security.taglibs.authz.AuthorizeTag.authorizeUsingAccessExpression(AuthorizeTag.java:58)

다음은 내 application-context-Security.xml입니다.

<http auto-config='true' >
    <intercept-url pattern="/user/**" access="ROLE_User" />
    <logout logout-success-url="/hello.htm" />
</http>

<beans:bean id="daoAuthenticationProvider"
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>

<beans:bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <beans:property name="providers">
        <beans:list>
            <beans:ref local="daoAuthenticationProvider" />
        </beans:list>
    </beans:property>
</beans:bean>

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder hash="plaintext" />
    </authentication-provider>
</authentication-manager>

나는 http 태그에서 use-expression = "true"를 사용할 수 있다는 것을 이해하지만 이는 intercept-url 태그와 java 코드에서 expression을 사용해야한다는 것을 의미합니다. 해결 방법이 있습니까?

해결법

  1. ==============================

    1.애플리케이션 컨텍스트에 하나만 추가 할 수 있습니다.

    애플리케이션 컨텍스트에 하나만 추가 할 수 있습니다.

    <bean id="webexpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" /> 
    

    가장 쉬운 방법은 구성에서 표현식을 활성화하는 것입니다. 그러면 하나가 추가됩니다. 이는 @Secured 어노테이션과 같은 자바 코드가 아닌 해당 블록 내에서 표현식을 사용해야한다는 것을 의미합니다.

  2. from https://stackoverflow.com/questions/11594104/spring-security-no-visible-websecurityexpressionhandler-instance-could-be-foun by cc-by-sa and MIT license