【发布时间】:2015-12-09 17:31:41
【问题描述】:
过去几天我一直在进行故障排除,但我似乎无法让表达式 hasRole 起作用。我正在使用 spring-security 4.0.1
我的 Spring Security xml
<bean id="expressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"/>
<security:global-method-security pre-post-annotations="enabled">
<security:expression-handler ref="expressionHandler"/>
</security:global-method-security>
<security:http auto-config="true" use-expressions="true">
<security:access-denied-handler error-page="/403" />
<security:intercept-url pattern="/login" access="permitAll" />
<security:intercept-url pattern="/logout" access="permitAll" />
<security:intercept-url pattern="/css/**/*.css" access="permitAll" />
<security:intercept-url pattern="/fonts/*.*" access="permitAll" />
<security:intercept-url pattern="/**" access="isAuthenticated()" />
<security:form-login login-page="/login" login-processing-url="/login" default-target-url="/landing" authentication-failure-url="/login?error" authentication-success-handler-ref="loginSuccesHandler" />
<security:logout logout-success-url="/login?logout" logout-url="/logout" invalidate-session="true" />
<security:session-management session-fixation-protection="none"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userDetailsService">
<security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
</security:authentication-manager>
<bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService" />
<property name="passwordEncoder" ref="passwordEncoder" />
</bean>
我所有的角色都存储在数据库中,并且具有类似于 link 中的 1 的架构。在我的自定义userDetailService 中,我将从数据库中加载它。我的角色价值观是这样的
PYRL-EMPPF-01
PYRL-EMPPF-02
PYRL-EMPPF-03
我什至尝试过添加前缀“ROLE_”,但似乎无法正常工作。
这是我如何使用 hasRole 表达式的示例代码。我正在尝试使用它来保护我的控制器方法。
@RequestMapping(value = "/URLABC", method = RequestMethod.GET)
@PreAuthorize("hasRole('ROLE_PYRL-EMPPF-01')")
public ModelAndView search(HttpSession session) throws Exception {
...
}
我试过@PreAuthorize("hasRole('ROLE_PYRL-EMPPF-01')") 和@PreAuthorize("hasRole('PYRL-EMPPF-01')") 都没有工作。
【问题讨论】:
-
你可以试试@Secured({ "ROLE_PYRL-EMPPF-01" })
标签: java spring spring-security