Spring3,Security3:系统可以在 Windows 上运行,但不能在 Linux 上运行 java.lang.IllegalArgumentException

Posted

技术标签:

【中文标题】Spring3,Security3:系统可以在 Windows 上运行,但不能在 Linux 上运行 java.lang.IllegalArgumentException【英文标题】:Spring3, Security3: System works on windows but not Linux java.lang.IllegalArgumentException 【发布时间】:2011-07-26 12:07:28 【问题描述】:

系统可以在 Windows 上运行,但不能在 Linux 上运行。我可以正常登录并列出数据,但是一旦我进入以下任何页面,我就会收到以下错误:

<http auto-config="true" use-expressions='true'>
        <intercept-url pattern="/friends/**" access="ROLE_USER" />
        <intercept-url pattern="/articles/**" access="ROLE_USER" />
</http>

java.lang.IllegalArgumentException

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.IllegalArgumentException: Failed to evaluate expression 'ROLE_USER'
    org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean(ExpressionUtils.java:13)
    org.springframework.security.web.access.expression.WebExpressionVoter.vote(WebExpressionVoter.java:34)
    org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:50)
    org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:203)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:106)
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)

【问题讨论】:

【参考方案1】:

请参阅spring forum。表达式应该是 hasRole("ROLE_USER")

【讨论】:

【参考方案2】:

在 Spring 3.0 中是 access="ROLE_USER"

在 Spring 4.0 或更高版本中,为 access="hasRole('ROLE_USER')"

【讨论】:

以上是关于Spring3,Security3:系统可以在 Windows 上运行,但不能在 Linux 上运行 java.lang.IllegalArgumentException的主要内容,如果未能解决你的问题,请参考以下文章

求熟悉spring security3的高手相助 我采用了security3 实现了权限控制,出了一些奇怪的问题实在不解

spring security3怎样拦截页面中的ajax要求

SecurityContextHolder.getContext().getAuthentication()为啥Security3.1和2.0执行上面语句结果不同?

spring security3.1升级到4.1问题访问/j_spring_security_check 404

在spring security3中解析memberOf属性以获取组

security3权限管理:SecurityMetadataSource不支持FilterInvocation?