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

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呢

相关推荐

    Spring开发指南——中文版

    《Spring开发指南——中文版》是由夏昕编著的一本针对Spring框架的中文教程,旨在帮助开发者更好地理解和应用Spring框架。Spring是Java平台上的一个核心框架,广泛应用于企业级应用开发,提供了一种全面的编程和配置...

    maven+springmvc+springsecurity+hibernate框架整合开发源代码

    本项目“maven+springmvc+springsecurity+hibernate框架整合开发源代码”就是一个这样的例子,它巧妙地将四个关键框架——Maven、Spring MVC、Spring Security和Hibernate融合在一起,构建了一个高效且安全的Web应用...

    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权限管理_学习笔记

    首先,Spring Security的配置始于Web应用的入口点——`web.xml`文件。在这里,我们需要定义一个名为`springSecurityFilterChain`的过滤器,该过滤器由`DelegatingFilterProxy`类处理,它会委托给Spring Security的...

    spring security

    - **配置 taglib**: 在 JSP 文件中使用 Spring Security 标签库。 - **authentication**: 显示当前登录用户信息。 - **authorize**: 控制页面元素的可见性。 - **acl/accesscontrollist**: 实现基于 ACL 的细粒度...

    spring security2 安全手册(牛人写的)

    - **配置taglib**:介绍如何在JSP页面中使用Spring Security提供的标签库。 - **authentication**:使用`authentication`标签获取当前登录用户的信息。 - **authorize**:利用`authorize`标签基于用户的权限决定是否...

    基于SpringBoot+SpringSecurity+Thymeleaf新冠疫情管理系统设计源码案例设计.zip

    本系统设计案例采用的是现代Web开发的主流技术栈——SpringBoot、SpringSecurity和Thymeleaf,旨在构建一个新冠疫情的管理平台,实现数据的高效存储、安全访问以及用户友好的界面展示。以下将对这三个核心组件进行...

    毕业论文——基于jsp的随堂考试系统

    4. **用户认证与授权**:系统需要管理用户权限,确保只有授权的用户可以参加考试,这可能涉及到session管理、cookie和Spring Security等安全框架。 5. **试题生成与管理**:如何随机组合题目、设置难度、防止作弊等...

    spring实现的网上书店

    1. **用户认证与授权**:Spring Security可以用来处理用户登录验证和权限控制,确保只有合法用户能访问特定资源。 2. **会话管理**:Spring Session提供了一种跨服务器共享session的解决方案,这对于多服务器部署的...

    springboot+jsp+xquery实现登录认证

    首先,让我们了解Spring Boot的核心组件——Spring Security。Spring Security是一个全面的安全框架,它为Web应用提供了强大的身份验证和授权功能。在我们的示例中,我们将利用Spring Security来处理用户的登录和...

    spring 登陆功能 小案例

    首先,我们需要理解Spring的核心组件——Spring MVC。Spring MVC是Spring框架的一部分,专门用于处理Web应用程序的请求和响应。在登录功能中,Spring MVC将扮演关键角色,负责接收HTTP请求、处理业务逻辑以及返回...

    spring——mvc

    Spring MVC 是一款基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 ...随着经验的增长,可以进一步探索 Spring Security、Spring Data、Spring Boot 等高级特性,提升你的开发技能。

    官方推荐——>jsp ssm mysql实现的校园二手市场交易平台源码

    1. 用户模块:包括用户注册、登录、个人信息管理等,使用Spring Security进行权限控制,确保用户信息的安全。 2. 商品模块:允许用户发布、编辑和删除二手商品,同时提供商品搜索和分类功能。 3. 购物车模块:用户...

    JSP源码——铭洲网络后台解决方案_ccmingzhou.zip

    可能会有自定义过滤器(Filter)实现身份验证,或者使用Spring Security等框架来保护敏感资源。 7. **异常处理**:全局异常处理机制确保程序在遇到错误时能正确反馈,提高用户体验。 8. **国际化与本地化**:对于...

    JSP源码——[新闻文章]梦想年华JSP新闻发布系统1.0_jspnews.zip

    这可能通过角色-权限模型实现,如Spring Security或Apache Shiro框架。 11. **错误处理与日志记录**:系统中应有完善的异常处理机制,以及使用如Log4j的日志记录系统,便于调试和问题定位。 12. **前端技术**:...

    Spring MVC-Web(4)

    在实际开发中,Spring MVC还可以与其他Spring模块,如Spring Data JPA、Spring Security、Spring AOP等无缝集成,提供更全面的解决方案。例如,Spring Data JPA简化了数据库操作,而Spring Security则提供了认证和...

    spring in action 英文原版

    根据提供的信息,我们可以推断出这是一本关于Spring框架的专业书籍——《Spring in Action》英文原版。本书由Craig Walls和Ryan Breidenbach撰写,并由Manning Publications出版。以下是基于书名、描述、标签以及...

    达内Spring教程.pdf格式

    在本教程中,我们将深入探讨Spring的核心技术——IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。 1. **Spring框架概述** Spring框架是一个全面的后端开发解决方案,...

    Spring完整Jar包

    核心容器包括了Spring的核心模块——Bean工厂(BeanFactory)和应用上下文(ApplicationContext)。BeanFactory是Spring的基本容器,用于管理对象的生命周期和依赖关系;ApplicationContext则扩展了BeanFactory,...

    JSP源码——[整站程序]EasyJF官网全站源码_easyjfcom_src.zip

    6. **安全与权限**:EasyJF可能会有内置的权限控制机制,例如Spring Security或Apache Shiro,用于实现用户的登录验证和权限管理。 7. **国际化与本地化**:为了支持多语言,源码会包含资源文件,如.properties或....

Global site tag (gtag.js) - Google Analytics