Spring security学习笔记三

一、获取登陆用户信息

1、使用Java代码获得,首先要了解几个security中的对象

SecurityContextHolder:我们把当前应用程序的当前安全环境的细节存储到它里边了,SecurityContextHolder使用ThreadLocal存储这些信息,这意味着,安全环境在同一个线程执行的方法一直是有效的。我们把安全主体和系统交互的信息都保存在SecurityContextHolder中了

SecurityContext::Security上下文,是一个接口。

Authentication :也是一个接口。我们把安全主体和系统交互的信息都保存在SecurityContextHolder中了。 Spring Security使用一个Authentication对应来表现这些信息。虽然你通常不需要自己创建一个Authentication对象,直接通过SecurityContextHolder获取上下文对象,然后通过上下文对象(SecurityContext)获取即可。

UserDetails:是一个Spring Security的核心接口。 它代表一个主体(包含于用户相关的信息)。在Authentication接口中有一个方法 Object getPrincipal(); 这个方法返回的是一个安全主题,大多数情况下,这个对象可以强制转换成UserDetails对象,获取到UerDetails对象之后,就可以通过这个对象的getUserName()方法获取当前用户名。

2、使用spring security的标签库

标签库存放在 spring-security-taglibs-XXX.jar中,在jsp页面中使用标签库的时候,首先引入标签库:下面在index.jsp中使用标签库输出登录用户

二、权限控制到页面上的功能按钮,以上面显示的admin的超链接为例,实际中我们往往需要只有具有ROLE_ADMIN权限的用户才能看到这个超链接,

.这个可以使用 标签库可以做到

<body>
这是首页,欢迎<sec:authentication property="name" /> ! <br />
<sec:authorize ifAllGranted="ROLE_ADMIN" >
<a href="admin.jsp">进入admin.jsp页面</a>
</sec:authorize>
</body>

sec:authorize 标签的属性:
A) ifAllGranted:只有当前用户拥有所有指定的权限时,才能显示标签体的内容 (相当于“与” 的关系)
B) ifAnyGranted:当前用户拥有指定的权限中的一个的时候,就能显示标签内部内容(相当于“或”的关系)
C) ifNotGranted:没有指定的权限的时候,显示标签体的内容 (相当于“非”的关系)

也可以写成下面的形式:当前用户如果能访问/admin.jsp,则显示标签体的内容
<sec:authorize url="/admin.jsp" >
<a href="admin.jsp">进入admin.jsp页面</a>
</sec:authorize>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值