在过去的几天里,我一直在进行故障排除,我似乎无法让表达式hasRole工作。我使用的是sping-Security 4.0.1
我的Spring Securityxml
<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\uux”,但我似乎无法实现。
下面是关于如何使用hasRole表达式的示例代码。我正试图用它来保护我的控制器方法。
@RequestMapping(value = "/URLABC", method = RequestMethod.GET)
@PreAuthorize("hasRole('ROLE_PYRL-EMPPF-01')")
public ModelAndView search(HttpSession session) throws Exception {
...
}
我尝试过预授权(“hasRole('ROLE\u PYRL-empf-01')”)和预授权(“hasRole('PYRL-empf-01')”)两种方法都不起作用。
不知何故,我设法找到了答案
<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 Securityxml配置放到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>
也不用组织。springframework。安全网状物通道表示DefaultWebSecurityExpressionHandler。我把它改成了使用org。springframework。安全通道表示方法DefaultMethodSecurityExpressionHandler。
如果有人能解释2 ExpressionHandler类之间的区别,那就太好了。
我的spring security xml 我的所有角色都存储在数据库中,并且有一个类似于此链接中的1的模式。在我的自定义中,我将从数据库加载它。我的角色价值观是这样的 我甚至尝试过把前缀“role_”,但我似乎不能让它工作。
我正在尝试测试使用标准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 重新控制器 如果我评论