当前位置: 首页 > 知识库问答 >
问题:

Spring security 4@preauthorize(“hasRole()”)不工作

暨弘毅
2023-03-14

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

我的所有角色都存储在数据库中,并且有一个类似于此链接中的1的模式。在我的自定义userdetailservice中,我将从数据库加载它。我的角色价值观是这样的

PYRL-EMPPF-01
PYRL-EMPPF-02
PYRL-EMPPF-03

我甚至尝试过把前缀“role_”,但我似乎不能让它工作。

@RequestMapping(value = "/URLABC", method = RequestMethod.GET)
@PreAuthorize("hasRole('ROLE_PYRL-EMPPF-01')")
public ModelAndView search(HttpSession session) throws Exception {
...
}

共有1个答案

沃瑾瑜
2023-03-14

不知怎么的,我设法偶然找到了答案

<bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler"/>
<security:global-method-security pre-post-annotations="enabled">
    <security:expression-handler ref="expressionHandler"/>
</security:global-method-security>

我只需要将这个spring配置从spring security xml配置放到spring servlet配置中。

这是我的web.xml。以前,上面的配置是application-security.xml中的,现在我将它移到dispatcher-servlet.xml中。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/dispatcher-servlet.xml
        /WEB-INF/application-security.xml
    </param-value>
</context-param>
 类似资料:
  • 在过去的几天里,我一直在进行故障排除,我似乎无法让表达式hasRole工作。我使用的是sping-Security 4.0.1 我的Spring Securityxml 我的所有角色都存储在数据库中,其模式类似于此链接中的1。在自定义的userDetailService中,我将从数据库中加载它。我的角色价值观是这样的 我甚至试着加上前缀“ROLE\uux”,但我似乎无法实现。 下面是关于如何使用h

  • 我正在尝试测试使用标准Spring Security注释和方法保护的web api。我查看了网站上的所有选项,没有任何帮助,下面是代码。没有角色,一切都很好。我为这个问题痛苦了好几天。我会感谢你的帮助,谢谢。 控制器类 如果,然后它返回用户,因为它应该 UserDetailsServiceImp 和添加角色的用户数据 这是数据库返回的内容

  • 我在使用Spring Security&Thymeleaf时遇到了一个问题,特别是在尝试使用hasRole表达式时。admin“用户有一个角色”admin“,但在尝试时解析为false 我得HTML: 结果如下: 我已经在security.xml文件中启用了use-expressions 并且在我的配置中包含了SpringSecurityDiscuale 而具有一组 为什么不起作用? 我很感激你的

  • 实际:200 我在MyController中有以下方法: 我创建了以下abstract-security-test.xml:

  • 我正在学习一个关于微软文档的教程,介绍如何使用Spring Boot Starter for Azure Active Directory保护我的Spring MVC应用程序。我正在努力保护我网站的管理区域。我在控制器方法上有一个@PreAuthorize注释,我只希望admin组中的用户可以访问它。我可以得到一个登录提示,但成功登录后,我得到了该控制器方法的403。当我删除@PreAuthori

  • 我尝试在我的应用程序中扮演角色。但我一直有个消息。 在数据库中,我有列角色和值USER或ADMIN 重新控制器 如果我评论