Spring Security中html页面设置hasRole无效的问题

Spring Security中html页面设置hasRole无效的问题

一、前言

学了几天的spring Security,偶然发现的hasRole和hasAnyAuthority的区别。当然,可能有更深入的我没看到。现在把我实际的调试结果分享给大家

二、失效原因及解决

下面是部分示例html页面代码

  1. <div sec:authorize="hasRole(‘R_ADMIN‘)">

  2.  

    <p class="bg-info">权限0001可见</p>

  3.  

    </div>

  4.  

    <div sec:authorize="hasRole(‘ROLE_MD‘)">

  5.  

    <p class="bg-info">权限0002可见</p>

  6.  

    </div>

  7.  

    <div sec:authorize="hasAnyAuthority(‘R_ADMIN‘)">

  8.  

    <p class="bg-info">权限0003可见</p>

  9.  

    </div>

  10.  

    <div sec:authorize="hasRole(‘ROLE_MD‘)">

  11.  

    <p class="bg-info">权限0004可见</p>

  12.  

    </div>

  13.  

    <div sec:authorize="hasAnyAuthority(‘ADMIN‘)">

  14.  

    <p class="bg-info">权限0005可见</p>

  15.  

    </div>

  16.  

    <div sec:authorize="hasRole(‘MD‘)">

  17.  

    <p class="bg-info">权限0006可见</p>

  18.  

    </div>

实际测试发现以下两点。

第一、在html页面中如果要使用hasRole去设置权限,那么必须是以ROLE_开头的角色。而hasAnyAuthority则不存在这个问题。查了一下官方文档并没有什么有用的东西。如果各位同学查到可以留言补充

再次调试发现第二点

第二、在html页面中使用hasRole时可以省略掉ROLE_部分,只在后端放入角色的时候前面加上ROLE_即可,而hasAnyAuthority不支持这么做。即当一个角色名是ROLE_MD的用户登录时,她能看到2、4、6;所以在权限的放入时,比如:auths.add(new SimpleGrantedAuthority(role.getRoleCode()));可以在前面加个ROLE_,html页面仍然写原来的角色名就行。

2019-04-0919:44:51

原文地址:https://www.cnblogs.com/itboxue/p/10679234.html

时间: 2024-08-27 02:57:44

Spring Security中html页面设置hasRole无效的问题的相关文章

spring security中配置密码为md5的带salt加密

spring security中配置密码为md5的带salt加密 service: private Md5PasswordEncoder encoder; //spring security md5 public Md5PasswordEncoder getEncoder() { return encoder; } @Resource public void setEncoder(Md5PasswordEncoder encoder) { this.encoder = encoder; } @O

spring boot跨域请求访问配置以及spring security中配置失效的原理解析

一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[origin]就是协议.域名和端口号.例如:http://www.baidu.com:80这个URL. 什么是同源 若地址里面的协议.域名和端口号均相同则属于同源. 是否是同源的判断 例如判断下面的URL是否与 http://www.a.com/test/index.html 同源 http://www.a

spring boot 整合spring security中spring security版本升级的遇到的坑

在spring security3.x的版本中 hasAnyRole这个方法不会对我们需要认证的身份前面加个前缀ROLE_,在3.x版本hasRole的源码如下 public final boolean hasAnyRole(String... roles) { Set<String> roleSet = getAuthoritySet(); for (String role : roles) { if (roleSet.contains(role)) { return true; } } r

spring security 中启用角色继承、ACL与CAS

<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security"              xmlns:beans="http://www.springframework.org/schema/beans"              xmlns:context=&

spring security中的过滤器

一.SS的默认过滤器 当配置的http是自动配置时,默认要经过SS的11个过滤器: 1,HttpSessionContextintegrationFilter:把session中的securitycontext放入securitycontextHolder中,用完后清空: 2,LogoutFilter:处理注销请求,默认请求地址为:/j_spring_security_logout; 3,AuthenticationProcessingFilter:认证过滤器,处理FROM登录,默认只处理:/j

spring security中@PreAuthorize注解的使用

添加依赖<!-- oauth --><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-oauth2</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId&g

Spring Security 表达式(Expressions) - hasRole示例

1.概述 Spring Security使用强大的Spring Expression Language(SpEL)提供各种各样的表达式.大多数这些Security表达式是针对上下文对象(当前经过身份验证的主体)进行工作的. 这些表达式的评估由SecurityExpressionRoot执行 - 它提供了Web安全性和方法级安全性的基础. Spring Security 3.0中引入了使用SpEL表达式作为授权机制的能力,并在Spring Security 4.x中继续使用,有关Spring Se

Spring Security教程之基于表达式的权限控制(九)

目录 1.1      通过表达式控制URL权限 1.2      通过表达式控制方法权限 1.2.1     使用@PreAuthorize和@PostAuthorize进行访问控制 1.2.2     使用@PreFilter和@PostFilter进行过滤 1.3      使用hasPermission表达式 Spring Security允许我们在定义URL访问或方法访问所应有的权限时使用Spring EL表达式,在定义所需的访问权限时如果对应的表达式返回结果为true则表示拥有对应的

Java Web系列:Spring Security 基础

Spring Security虽然比JAAS进步很大,但还是先天不足,达不到ASP.NET中的认证和授权的方便快捷.这里演示登录.注销.记住我的常规功能,认证上自定义提供程序避免对数据库的依赖,授权上自定义提供程序消除从缓存加载角色信息造成的角色变更无效副作用. 1.基于java config的Spring Security基础配置 (1)使用AbstractSecurityWebApplicationInitializer集成到Spring MVC 1 public class Securit