`
snoopy7713
  • 浏览: 1123457 次
  • 性别: 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; 
    } 

分享到:
评论

相关推荐

    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...

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

    这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进 行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行了修正,建议开发 者以这一版本的文档为参考。 ...

    Spring Security 中文教程.pdf

    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 ...

    Guns-Separation v1.1

    5、基于spring security(jwt) + 用户UUID双重认证。 6、基于AOP实现的接口粒度的鉴权,最细粒度过滤权限资源。 7、基于hibernate validator实现的校验框架,支持自定义校验注解。 8、提供Request-No的响应header...

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

    Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密  WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件...

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

    Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密  WDSsoft的一款免费源代码 JCT 1.0,它是一个Java加密解密常用工具包。 Java局域网通信——飞鸽传书源代码 28个目标文件...

    Guns-Separation-其他

    5、基于spring security(jwt) + 用户UUID双重认证。6、基于AOP实现的接口粒度的鉴权,最细粒度过滤权限资源。7、基于hibernate validator实现的校验框架,支持自定义校验注解。8、提供Request-No的响应header快速...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包7

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

Global site tag (gtag.js) - Google Analytics