上篇提到了,将用户,角色,组,权限存放到数据库中,会遇到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;
-
-
-
-
-
-
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() {
-
-
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:
-
http:
-
<welcome-file-list>
-
<welcome-file>index.jsp</welcome-file>
-
</welcome-file-list>
-
<taglib>
-
<taglib-uri>http:
-
<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>
通过测试会发现,
第一个标签显示,第二个标签不显示,目的已达到,另外,自定义标签教程,方便以后查询
您好 请问页面标签
<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实现权限控制,并结合前端Element UI的多标签页(Tabs)组件,提供更加高效的用户体验。SpringBoot是一个流行的Java开发框架,它简化了Spring应用的...
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...
在【描述】中提到的“V2.0.0中实现了使用spring security”,意味着这个系统已经集成了Spring Security,这是一个强大的、高度可定制的身份验证和授权框架。Spring Security为Web应用和企业应用提供了全面的安全服务...
【描述】:“在V2.0.0版本中,该系统实现了使用Spring Security进行权限控制和登录认证检验。” Spring Security是一个强大的安全框架,它可以提供身份验证、授权、会话管理等功能,保护应用程序免受攻击。在V2.0.0...
- Vue.js通过`<script>`标签引入,并在HTML模板中使用`v-bind`、`v-if`等指令进行数据绑定和逻辑控制。 - `vue-router`库用于管理页面路由,`axios`库负责前后端通信,发送HTTP请求。 5. **项目结构**: - `...
5. **安全性**:考虑到企业级应用的安全需求,系统可能集成了Spring Security或Apache Shiro等安全框架,提供身份验证、授权和会话管理等功能,防止未授权访问和攻击。 6. **响应式设计**:为了适应不同设备的浏览...
开发者可以使用JSP标签库(Tag Libraries)和自定义标签来简化页面开发,如JSTL(JavaServer Pages Standard Tag Library)。 2. **数据库集成**:新闻系统必然涉及到大量的数据存储,如新闻标题、内容、作者、发布...
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"> <title>Hello World! <h1 th:inline="text">Hello...
此外,Spring Security或Apache Shiro这样的权限管理库可能会被用于实现用户认证和授权功能,这些库提供了强大的权限控制API,能够方便地进行权限策略的设置和管理。 在实际应用中,权限系统需要与身份验证系统(如...
- **用户权限管理**: 提供角色、用户、权限的管理,实现不同用户访问不同内容的功能,这部分可能涉及到Spring Security或自定义的安全机制。 - **模板引擎**: JEECMS使用模板引擎如FreeMarker或Velocity,使开发者...
- **分类与标签**:系统可能支持自定义分类和标签,方便对内容进行组织和检索。 - **权限控制**:不同的用户角色有不同的操作权限,比如编辑、审核和发布内容。 - **模板引擎**:通过模板引擎,MRCMS可以动态生成...
"java 软件/插件",这里的标签表明了软件是用Java语言编写,且可能涉及到一些与Java相关的插件或库,如Spring框架用于依赖注入和AOP,MyBatis或Hibernate作为持久层框架,以及可能使用的安全框架如Spring Security。...
6. **安全性**:Jeebbs可能集成了Spring Security或Apache Shiro等安全框架,以实现用户认证和授权。 7. **缓存机制**:为了提高性能,Jeebbs可能使用了EhCache或Redis进行数据缓存。 8. **单元测试与集成测试**:...
Spring Security用于权限控制,确保系统安全。 3. **模板引擎**:byCMS内置了自定义的模板引擎,允许开发者使用简单的语法编写动态网页,提高开发效率。 4. **数据库设计**:采用ORM(Object-Relational Mapping)...
这部分可能会用到Spring Security或者自定义的安全框架来实现。 4. **模板引擎**:为了方便用户定制网站外观,CMS通常会包含模板引擎,如FreeMarker或Velocity,允许开发者使用模板语言编写可复用的页面布局。 5. ...
【标题】"eSHOP网上书店 V0.2(会员登录模块)"是一个基于Web的电子商务应用,主要关注的是用户身份验证和授权的部分。这个项目可能是为一个在线书店设计的,允许用户注册、登录并进行图书购买等操作。会员登录模块...
**renren-security-v4.0.1**这个压缩包名称可能表示这是一个名为"renren-security"的项目的第4.0.1版本。"security"可能意味着该项目专注于安全性,可能提供一套完整的安全解决方案,包括认证、授权和安全审计。这个...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,从简单的静态文件服务到复杂的Web应用程序。标题"jetty2016/10最新jar"指的是2016年10月发布的Jetty版本的JAR文件,这通常...