`

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

 
阅读更多

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

 

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

 

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

 

tag的java类

 

/**
 * 
 */
package org.springsecurity.tag;

import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 * @author jgao1
 * 
 */
public class AuthorizeTag extends BodyTagSupport {

	private static final long serialVersionUID = 1L;

	private String URL;

	public String getURL() {
		return URL;
	}
	
	public void setURL(String uRL) {
		URL = uRL;
	}
	@Override
	public int doStartTag() {
		// 如果URL不空就显示URL,否则就不显
		if (null != URL && !"".equals(URL)) {
			return EVAL_BODY_INCLUDE;
		}
		return this.SKIP_BODY;
	}
}

 

authorize.tld

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
	version="2.1">
	<description>
	<![CDATA[security Tags]]>
	</description>
	<tlib-version>1.0</tlib-version>
	<short-name>security</short-name>
	<uri>http://www.springsecurity.org/jsp</uri>
	<tag>
		<description>
		<![CDATA[authorize Tag]]>
		</description>
		<name>authorize</name>
		<tag-class>
            org.springsecurity.tag.AuthorizeTag
		</tag-class>
		<body-content>JSP</body-content>
		<attribute>
			<name>URL</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<type>java.lang.String</type>
		</attribute>
	</tag>
</taglib>

  web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<taglib>
		<taglib-uri>http://www.springsecurity.org/jsp</taglib-uri>
        <taglib-location>/WEB-INF/authorize.tld</taglib-location>
	</taglib>
</web-app>

 index,jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security"%>
<body>
<security:authorize URL="qqq">
	<a href="admin.jsp">进入admin页面</a>
</security:authorize>

<security:authorize URL="">
	<a href="admin.jsp">进入admin页面</a>
</security:authorize>
</body>

 通过测试会发现,

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

 

 

分享到:
评论
4 楼 ziyourJava 2017-05-19  
[flash=200,200][img][url][list]
[*][list]
[*][*][list]
[*][*][*][list]
[*][*][*][*][list]
[*][*][*][*][*][img][list]
[*][*][*][*][*][*]
引用
引用
[u][i][b][/b][/i][/u]
[*][*][*][*][*][/list][/img]
[*][*][*][*][/list]
[*][*][*][/list]
[*][*][/list]
[*][/list]
[/list][/url][/img][/flash]
3 楼 jackyrong 2013-04-16  
在自定义标签中通过pageContext获取到user,查看url是不是在user的权限内了,在就显示,不在就不显示,在如下的方法中做处理


我也想用这个方法去做,但遇到个问题,
就是
这里有个问题,比如某资源url,要在自定义标签中取得包含在标签内的a href,要如何做?
比如
<s:authorize url="......">
<a href="xxx.action"/>
</s:authorize>
我要取得a href=xxx.action,然后 传入自定义标签类中,获得这个URL对应的能访问的角色有多少个,这个如何实现呢?谢谢
2 楼 gaojiewyh 2012-05-11  
如果你想用它的,他目前就是这个样子的,角色是不能维护的,需要你自己去修改它的代码,

最简单的方法是你自己重新自定义标签,在登陆时把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; 
    } 
1 楼 leon.s.kennedy 2012-05-10  
您好 请问页面标签
<sec:authorize ifAllGranted="ROLE_USER">可以访问</sec:authorize>
其中角色ROLE_USER 是写死的(硬编码) 系统角色是可以维护的,请问该如何实现?

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

相关推荐

    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