`
snoopy7713
  • 浏览: 1148809 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

spring security进级篇 V 自定义标签控制显示

阅读更多

上篇提到了,将用户,角色,组,权限存放到数据库中,会遇到UI上spring security 标签失效问题,建议自己定义自定义标签,下面就自定义标签,具体说一下思路;

 

spring security 登陆时将用户信息存放于session中,在自定义标签中通过pageContext 获取session相关信息,通过相应传人的URL,进行相应的比对就可以判断某些URL是否有访问权限,进而控制是否显示。

 

下面是一个简单的自定义标签的例子,如果URL为空,则不显示超链接,否则就显示,在现实中这个判断可以和spring security 结合使用:

 

tag的java类

 

Java代码  收藏代码
  1. /**  
  2.  *   
  3.  */   
  4. package  org.springsecurity.tag;  
  5.   
  6. import  javax.servlet.jsp.tagext.BodyTagSupport;  
  7.   
  8. /**  
  9.  * @author jgao1  
  10.  *   
  11.  */   
  12. public   class  AuthorizeTag  extends  BodyTagSupport {  
  13.   
  14.     private   static   final   long  serialVersionUID = 1L;  
  15.   
  16.     private  String URL;  
  17.   
  18.     public  String getURL() {  
  19.         return  URL;  
  20.     }  
  21.       
  22.     public   void  setURL(String uRL) {  
  23.         URL = uRL;  
  24.     }  
  25.     @Override   
  26.     public   int  doStartTag() {  
  27.         // 如果URL不空就显示URL,否则就不显   
  28.         if  ( null  != URL && ! "" .equals(URL)) {  
  29.             return  EVAL_BODY_INCLUDE;  
  30.         }  
  31.         return   this .SKIP_BODY;  
  32.     }  
  33. }  

 

authorize.tld

Xml代码  收藏代码
  1. <? xml   version = "1.0"   encoding = "UTF-8"   ?>   
  2. < taglib   xmlns = "http://java.sun.com/xml/ns/javaee"   
  3.     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  4.     xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
  6.     version = "2.1" >   
  7.     < description >   
  8.     <![CDATA[security Tags]]>   
  9.     </ description >   
  10.     < tlib-version > 1.0 </ tlib-version >   
  11.     < short-name > security </ short-name >   
  12.     < uri > http://www.springsecurity.org/jsp </ uri >   
  13.     < tag >   
  14.         < description >   
  15.         <![CDATA[authorize Tag]]>   
  16.         </ description >   
  17.         < name > authorize </ name >   
  18.         < tag-class >   
  19.             org.springsecurity.tag.AuthorizeTag  
  20.         </ tag-class >   
  21.         < body-content > JSP </ body-content >   
  22.         < attribute >   
  23.             < name > URL </ name >   
  24.             < required > false </ required >   
  25.             < rtexprvalue > true </ rtexprvalue >   
  26.             < type > java.lang.String </ type >   
  27.         </ attribute >   
  28.     </ tag >   
  29. </ taglib >   

  web.xml

Java代码  收藏代码
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  
  2. <web-app version="2.5"  xmlns= "http://java.sun.com/xml/ns/j2ee"   
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">   
  6.     <welcome-file-list>  
  7.         <welcome-file>index.jsp</welcome-file>  
  8.     </welcome-file-list>  
  9.     <taglib>  
  10.         <taglib-uri>http://www.springsecurity.org/jsp</taglib-uri>   
  11.         <taglib-location>/WEB-INF/authorize.tld</taglib-location>  
  12.     </taglib>  
  13. </web-app>  

 index,jsp

 

Java代码  收藏代码
  1. <%@ page language= "java"  contentType= "text/html; charset=UTF-8"  pageEncoding= "UTF-8" %>  
  2. <%@ taglib uri="http://www.springsecurity.org/jsp"  prefix= "security" %>  
  3. <body>  
  4. <security:authorize URL="qqq" >  
  5.     <a href="admin.jsp" >进入admin页面</a>  
  6. </security:authorize>  
  7.   
  8. <security:authorize URL="" >  
  9.     <a href="admin.jsp" >进入admin页面</a>  
  10. </security:authorize>  
  11. </body>  

 通过测试会发现,

第一个标签显示,第二个标签不显示,目的已达到,另外,自定义标签教程,方便以后查询

 

 

您好 请问页面标签
<sec:authorize ifAllGranted="ROLE_USER">可以访问</sec:authorize>
其中角色ROLE_USER 是写死的(硬编码) 系统角色是可以维护的,请问该如何实现?

另一种url-pattern类型的<sec:authorize url="/add*">
经过测试不能用,有BUG spring官方文档上说 在应用程序上下文必须有webapplicationContext实例,才能用 google上查不到 请帮忙解答,非常感谢!

 

 

如果你想用它的,他目前就是这个样子的,角色是不能维护的,需要你自己去修改它的代码,

最简单的方法是你自己重新自定义标签,在登陆时把user放到session里面,

在自定义标签中通过pageContext获取到user,查看url是不是在user的权限内了,在就显示,不在就不显示,在如下的方法中做处理

public int doStartTag() { 
        // 如果URL不空就显示URL,否则就不显
        // 现实中通过pagecontex获取session中的user,进而找到它角色对应的资源中有没有和url匹配的,有就显示,没有就不显示

        if (null != URL && !"".equals(URL)) { 
            return EVAL_BODY_INCLUDE; 
        } 
        return this.SKIP_BODY; 
    } 

分享到:
评论

相关推荐

    SpringBoot整合权限控制SpringSecurity.docx

    在本文中,我们将探讨如何在SpringBoot项目中整合SpringSecurity实现权限控制,并结合前端Element UI的多标签页(Tabs)组件,提供更加高效的用户体验。SpringBoot是一个流行的Java开发框架,它简化了Spring应用的...

    SpringSecurity 3.0.1.RELEASE.CHM

    5.5. Spring Security中的访问控制(验证) 5.5.1. 安全和AOP建议 5.5.2. 安全对象和AbstractSecurityInterceptor 5.5.2.1. 配置属性是什么? 5.5.2.2. RunAsManager 5.5.2.3. AfterInvocationManager 5.5.2.4...

    基于 springboot + layuiadmin 实现的后台管理系统,V2.0.0中实现了使用spring se.zip

    在【描述】中提到的“V2.0.0中实现了使用spring security”,意味着这个系统已经集成了Spring Security,这是一个强大的、高度可定制的身份验证和授权框架。Spring Security为Web应用和企业应用提供了全面的安全服务...

    基于 springboot + layuiadmin 实现的后台管理系统

    【描述】:“在V2.0.0版本中,该系统实现了使用Spring Security进行权限控制和登录认证检验。” Spring Security是一个强大的安全框架,它可以提供身份验证、授权、会话管理等功能,保护应用程序免受攻击。在V2.0.0...

    springboot-demo

    - Vue.js通过`&lt;script&gt;`标签引入,并在HTML模板中使用`v-bind`、`v-if`等指令进行数据绑定和逻辑控制。 - `vue-router`库用于管理页面路由,`axios`库负责前后端通信,发送HTTP请求。 5. **项目结构**: - `...

    [整站程序]companyweb整站系统 V7.0

    5. **安全性**:考虑到企业级应用的安全需求,系统可能集成了Spring Security或Apache Shiro等安全框架,提供身份验证、授权和会话管理等功能,防止未授权访问和攻击。 6. **响应式设计**:为了适应不同设备的浏览...

    [新闻文章]锋网新闻发布V1.0_ijspnewsv1.0.rar

    开发者可以使用JSP标签库(Tag Libraries)和自定义标签来简化页面开发,如JSTL(JavaServer Pages Standard Tag Library)。 2. **数据库集成**:新闻系统必然涉及到大量的数据存储,如新闻标题、内容、作者、发布...

    spring boot使用thymeleaf模板的方法详解

    &lt;html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"&gt; &lt;title&gt;Hello World! &lt;h1 th:inline="text"&gt;Hello...

    FEBS Cloud微服务权限系统 v1.0.zip

    此外,Spring Security或Apache Shiro这样的权限管理库可能会被用于实现用户认证和授权功能,这些库提供了强大的权限控制API,能够方便地进行权限策略的设置和管理。 在实际应用中,权限系统需要与身份验证系统(如...

    JEECMS v3.0.2 源码包jeecms_v3.0.2_final_src.zip

    - **用户权限管理**: 提供角色、用户、权限的管理,实现不同用户访问不同内容的功能,这部分可能涉及到Spring Security或自定义的安全机制。 - **模板引擎**: JEECMS使用模板引擎如FreeMarker或Velocity,使开发者...

    基于Java的MRCMS内容管理系统(JAVA).zip

    - **分类与标签**:系统可能支持自定义分类和标签,方便对内容进行组织和检索。 - **权限控制**:不同的用户角色有不同的操作权限,比如编辑、审核和发布内容。 - **模板引擎**:通过模板引擎,MRCMS可以动态生成...

    tomcat部署web项目之java版SaaS OA协同办公软件 v2.0-saas-oa

    "java 软件/插件",这里的标签表明了软件是用Java语言编写,且可能涉及到一些与Java相关的插件或库,如Spring框架用于依赖注入和AOP,MyBatis或Hibernate作为持久层框架,以及可能使用的安全框架如Spring Security。...

    基于java的开发源码-开源论坛系统 jeebbs v5.1 安装包.zip

    6. **安全性**:Jeebbs可能集成了Spring Security或Apache Shiro等安全框架,以实现用户认证和授权。 7. **缓存机制**:为了提高性能,Jeebbs可能使用了EhCache或Redis进行数据缓存。 8. **单元测试与集成测试**:...

    贝云cms(bycms)开发手册 v2.0

    Spring Security用于权限控制,确保系统安全。 3. **模板引擎**:byCMS内置了自定义的模板引擎,允许开发者使用简单的语法编写动态网页,提高开发效率。 4. **数据库设计**:采用ORM(Object-Relational Mapping)...

    [CMS程序]OSPod.CMS专业建站平台 v3.0.2_ospod.zip

    这部分可能会用到Spring Security或者自定义的安全框架来实现。 4. **模板引擎**:为了方便用户定制网站外观,CMS通常会包含模板引擎,如FreeMarker或Velocity,允许开发者使用模板语言编写可复用的页面布局。 5. ...

    eSHOP网上书店 V0.2(会员登录模块)

    【标题】"eSHOP网上书店 V0.2(会员登录模块)"是一个基于Web的电子商务应用,主要关注的是用户身份验证和授权的部分。这个项目可能是为一个在线书店设计的,允许用户注册、登录并进行图书购买等操作。会员登录模块...

    人人开源,前后端不分离版本

    **renren-security-v4.0.1**这个压缩包名称可能表示这是一个名为"renren-security"的项目的第4.0.1版本。"security"可能意味着该项目专注于安全性,可能提供一套完整的安全解决方案,包括认证、授权和安全审计。这个...

    jetty2016/10最新jar

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,从简单的静态文件服务到复杂的Web应用程序。标题"jetty2016/10最新jar"指的是2016年10月发布的Jetty版本的JAR文件,这通常...

Global site tag (gtag.js) - Google Analytics