`
234390216
  • 浏览: 10187714 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460511
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771196
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395010
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393707
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678014
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529030
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178304
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:460963
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:149924
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66666
社区版块
存档分类
最新评论

Spring Security(18)——Jsp标签

阅读更多

Jsp标签

 

目录

1.1     authorize

1.2     authentication

1.3     accesscontrollist

 

       Spring Security也有对Jsp标签的支持的标签库。其中一共定义了三个标签:authorizeauthenticationaccesscontrollist。其中authentication标签是用来代表当前Authentication对象的,我们可以利用它来展示当前Authentication对象的相关信息。另外两个标签是用于权限控制的,可以利用它们来包裹需要保护的内容,通常是超链接和按钮。

       如果需要使用Spring Security的标签库,那么首先我们应当将对应的jarspring-security-taglibs-xxx.jar放入WEB-INF/lib下;其次我们需要在页面上引入Spring Security的标签库。

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

       接下来就可以在页面上自由的使用Spring Security的标签库提供的标签了。

 

1.1     authorize

       authorize是用来判断普通权限的,通过判断用户是否具有对应的权限而控制其所包含内容的显示,其可以指定如下属性。

       1access

       access属性需要使用表达式来判断权限,当表达式的返回结果为true时表示拥有对应的权限。

   <sec:authorize access="hasRole('admin')">

      <a href="admin.jsp">admin page</a>

   </sec:authorize>

       需要注意的是因为access属性是使用表达式的,所以我们必须确保ApplicationContext中存在一个WebSecurityExpressionHandler,最简单的办法就是直接使用NameSpace,通过设置http元素的use-expressions="true"NameSpace自动为我们创建一个WebSecurityExpressionHandler

 

       2ifAllGrantedifAnyGrantedifNotGranted

       这三个属性的用法类似,它们都接收以逗号分隔的权限列表,且不能使用表达式。ifAllGranted表示需要包含所有的权限,ifAnyGranted表示只需要包含其中的任意一个即可,ifNotGranted表示不能包含指定的任意一个权限。

   <!-- 需要拥有所有的权限 -->

   <sec:authorize ifAllGranted="ROLE_ADMIN">

      <a href="admin.jsp">admin</a>

   </sec:authorize>

   <!-- 只需拥有其中任意一个权限 -->

   <sec:authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN">hello</sec:authorize>

   <!-- 不允许拥有指定的任意权限 -->

   <sec:authorize ifNotGranted="ROLE_ADMIN">

      <a href="user.jsp">user</a>

   </sec:authorize>

 

       3url

       url表示如果用户拥有访问指定url的权限即表示可以显示authorize标签包含的内容。

   <!-- 拥有访问指定url的权限才显示其中包含的内容 -->

   <sec:authorize url="/admin.jsp">

      <a href="admin.jsp">admin</a>

   </sec:authorize>

 

       4method

       method属性是配合url属性一起使用的,表示用户应当具有指定url指定method访问的权限,method的默认值为GET,可选值为http请求的7种方法。

   <!-- 拥有访问指定url的权限才显示其中包含的内容 -->

   <sec:authorize url="/admin.jsp">

      <a href="admin.jsp">admin</a>

   </sec:authorize>

       限制访问方法是通过http元素下的intercept-url元素的method属性来指定的,如:

   <security:intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" method="POST"/>  

 

       5var

       用于指定将权限鉴定的结果存放在pageContext的哪个属性中。该属性的主要作用是对于在同一页面的多个地方具有相同权限鉴定时,我们只需要定义一次,然后将鉴定结果以var指定的属性名存放在pageContext中,其它地方可以直接使用之前的鉴定结果。

   <sec:authorize access="isFullyAuthenticated()" var="isFullyAuthenticated">

      只有通过登录界面进行登录的用户才能看到1<br/>

   </sec:authorize>

   上述权限的鉴定结果是:${isFullyAuthenticated }<br/>

   <%if((Boolean)pageContext.getAttribute("isFullyAuthenticated")) {%>

      只有通过登录界面进行登录的用户才能看到2

   <%}%>

 

各属性对应的优先级

       既然我们可以通过属性accessurlifAllGrantedifAnyGranted等来指定应当具有的权限,那么当同时指定多个属性时,它们的作用效果是什么样的呢?authorize标签进行权限鉴定的属性根据优先级的不同可以分为三类,access为一类;url为一类;ifAllGrantedifAnyGrantedifNotGranted为一类。这三类将同时只有一类产生效果。它们的优先级如下:

       1access具有最高的优先级,如果指定了access属性,那么将以access属性指定的表达式来鉴定当前用户是否有权限。不管结果如何,此时其它属性都将被忽略。

       2、如果没有指定access属性,那么url属性将具有最高优先级,此时将直接通过url属性和method属性(默认为GET)来鉴定当前用户是否有权限。不管结果如何,此时都将忽略ifAllGrantedifAnyGrantedifNotGranted属性。

       3、如果accessurl都没有指定,那么将使用第三类属性来鉴定当前用户的权限。当第三类里面同时指定了多个属性时,它们将都发生效果,即必须指定的三类权限都满足才认为是有对应的权限。如ifAllGranted要求有ROLE_USER的权限,同时ifNotGranted要求不能有ROLE_ADMIN的权限,则结果是它们的并集,即只有拥有ROLE_USER权限,同时不拥有ROLE_ADMIN权限的用户才被允许获取指定的内容。

 

1.2     authentication

       authentication标签用来代表当前Authentication对象,主要用于获取当前Authentication的相关信息。authentication标签的主要属性是property属性,我们可以通过它来获取当前Authentication对象的相关信息。如通常我们的Authentication对象中存放的principle是一个UserDetails对象,所以我们可以通过如下的方式来获取当前用户的用户名。

   <sec:authentication property="principal.username"/>

 

       当然,我们也可以直接通过Authenticationname属性来获取其用户名。

   <sec:authentication property="name"/>

     property属性只允许指定Authentication所拥有的属性,可以进行属性的级联获取,如“principle.username”,不允许直接通过方法进行调用。

       除了property属性之外,authentication还可以指定的属性有:varscopehtmlScape

var属性

       var属性用于指定一个属性名,这样当获取到了authentication的相关信息后会将其以var指定的属性名进行存放,默认是存放在pageConext中。可以通过scope属性进行指定。此外,当指定了var属性后,authentication标签不会将获取到的信息在页面上进行展示,如需展示用户应该通过var指定的属性进行展示,或去掉var属性。

   <!-- 将获取到的用户名以属性名username存放在session -->

   <sec:authentication property="principal.username" scope="session" var="username"/>

   ${username }

 

scope属性

       var属性一起使用,用于指定存放获取的结果的属性名的作用范围,默认我pageContextJsp中拥有的作用范围都进行进行指定。

 

htmlScape属性

       表示是否需要将html进行转义。默认为true

 

1.3     accesscontrollist

       accesscontrollist标签是用于鉴定ACL权限的。其一共定义了三个属性:hasPermissiondomainObjectvar,其中前两个是必须指定的。hasPermission属性用于指定以逗号分隔的权限列表;domainObject用于指定对应的域对象;而var则是用以将鉴定的结果以指定的属性名存入pageContext中,以供同一页面的其它地方使用。需要注意的是使用accesscontrollist标签时ApplicationContext中必须存在一个PermissionEvaluator bean,因为accesscontrollist标签就是通过PermissionEvaluator来鉴定对应的权限的。如果我们正在使用Spring SecurityACL模块,那么PermissionEvaluator通常就对应着AclPermissionEvaluator。此外,如果domainObject属性指定的domainObjectnull则默认认为是有权限的,否则如果当前Authentication对象为null则默认认为是没有权限的。

   <sec:accesscontrollist hasPermission="1,2" domainObject="${someTargetDomainObject }" >

      如果当前Authentication对指定的domainObject拥有指定的hasPermission则将可以看到这部分内容。

   </sec:accesscontrollist>

 

(注:本文是基于Spring Security3.1.6所写)

 

(注:原创文章,转载请注明出处。原文地址:http://elim.iteye.com/blog/2263097

 

5
4
分享到:
评论
6 楼 Xuxiheng 2016-01-02  
希望博主早日把源代码共享出来,谢谢!像《Spring整合JMS》这个系列一样!  
5 楼 h819 2015-12-23  
chenjazz 写道
是我看过的写的最好的关于SS的文章了,简直比官方文档还好,赞一个!


同感 ...
4 楼 h819 2015-12-23  
somefuture 写道
怎么集成springboot呢


spring boot 集成的是最新版本的spring security ,博主的是 3.1 的,基于 xml 的

有博主的基础,来套 spring boot 的,不难

喜好不同吧,spring boot 自动化配置的太多,隐藏了很多细节,太傻瓜化了,牛人可能不喜欢
3 楼 234390216 2015-12-18  
chenjazz 写道
是我看过的写的最好的关于SS的文章了,简直比官方文档还好,赞一个!

还有两篇。
2 楼 chenjazz 2015-12-18  
是我看过的写的最好的关于SS的文章了,简直比官方文档还好,赞一个!
1 楼 somefuture 2015-12-10  
怎么集成springboot呢

相关推荐

    SpringSecurity 3.0.1.RELEASE.CHM

    19. JSP标签库 19.1. 声明Taglib 19.2. authorize标签 19.3. authentication 标签 19.4. accesscontrollist 标签 20. Java认证和授权服务(JAAS)供应器 20.1. 概述 20.2. 配置 20.2.1. JAAS ...

    Spring Security-3.0.1中文官方文档(翻译版)

    Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进 行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行...

    Spring Security 中文教程.pdf

    20. JSP标签库 20.1. 声明Taglib 20.2. authorize 标签 20.3. authentication 标签 20.4. accesscontrollist 标签 21. Java认证和授权服务(JAAS)供应器 21.1. 概述 21.2. 配置 21.2.1. JAAS ...

    基于 SpringBoot + JPA + Security + Thymeleaf 实现的开发者社区+源代码+文档说明

    ORM框架用的 Spring Data JPA,权限管理用的是 Spring Security。 以 MySQL 作为数据库,同时用 Redis 数据库缓存几个排行榜。模板引擎使用的是官方推荐的 Thymeleaf,告别JSP吧。 图片上传使用第三方上传——七牛云...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java面试题以及技巧

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题目与技巧1

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题及技巧4

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题及技巧3

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

    java面试题以及技巧6

    │ Struts+Hibernate+Spring轻量级J2EE企业应用实战.pdf │ Struts中文手册.pdf │ Struts配置文件详解.txt │ 上海税友.txt │ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ ...

Global site tag (gtag.js) - Google Analytics