2012-07-21 14 views
18

Yalnızca kullanıcı kimliği doğrulanmışsa, bir JSP sayfasında çıkış bağlantısını görüntülemede sorun yaşıyorum.Yay Güvenliği - Görünür WebSecurityExpressionHandler örneği, uygulama bağlamında bulunamadı

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

İstisna: Burada

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) 

benim olan uygulama bağlamı-Security.xml: Anlıyorum

<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> 

Burada JSP sayfasının bu çizgisinde olması istisnadır http etiketinde use-expression = "true" kullanabileceğimi ancak bu, intercept-url etiketlerinde ve java kodunda ifade kullanmam gerektiği anlamına gelir. Bir çözüm var mı?

+0

İlgisiz bir gözlem. Yapılandırmanızdaki "daoAuthenticationProvider" ve "authenticationManager" kullanılmamaktadır. –

cevap

41

Sadece kendi uygulama bağlamında

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

bir ekleyebilirsiniz ancak en kolay yolu sadece <http> yapılandırmasında ifadeleri sağlamak ve sizin için eklenecektir olduğunu. Bu sadece, bu kod içindeki ifadeleri kullanmanız gerektiği anlamına gelir, yöntem @Secured ek açıklamaları gibi Java kodunda değil.

+1

Haklısınız, sadece bloğu içinde ifade kullanmak zorunda kaldım. Problem çözüldü. – dukable

+10

ve kesinlikle açık olmak gerekirse, etiketiniz, true değerine ayarlanmış bir "kullanım ifadeleri" özniteliği içermelidir, örn.

İlgili konular