初体验,从天开始研究一下Spring Security这个权限框架。
第一个简单的Demo实现:
1、创建Web Project;
2、在src目录下创建applicationContext.xml文件;
3、创建三个JSP页面:分别为admin.jsp、user.jsp、index.jsp;
4、加入实现Spring Security所依赖的jar文件,可以将源码包中
例子(spring-security-samples-tutorial-3.0.3.RELEASE.war )
的所有jar文件扔到你的工程中;
5、修改你的web.xml文件;
下面为个文件的内容:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<http auto-config='true'>
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="user" password="user" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
admin.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<title>admin</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
这个是我的admin.jsp
</body>
</html>
user.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<title>user</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
这个是我的user.jsp页面
</body>
</html>
index.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<title>index</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>
<body>
<ul>
<li><a href="user.jsp">user.jsp</a></li>
<li><a href="admin.jsp">admin.jsp</a></li>
<li><a href="j_spring_security_logout">注销</a></li>
</ul>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
启动服务,分别用admin,admin;user,user 进行登录,查看效果。admin可以访问三个页面index.jsp、user.jsp和admin.jsp。而user只可以访问两个页面 index.jsp与user.jsp;原因很简单,在applicationContext.xml 文件中我们创建了两个用户与两个角色,admin拥有ROLE_ADMIN角色,user有ROLE_USER角色。不同的角色访问的路径资源是不同的ROLE_ADMIN可以访问到admin.jsp页面,而ROLE_USER可以访问出admin.jsp以外的其他页面。
值得注意的是不同角色访问不同路径的定义方式,上面的定义方式是:
<intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="ROLE_USER" />
如果将他们的上下顺序调换一下,意义就完全变了。ROLE_USER可以访问所有的页面。
Family168中有这样的解释:
http部分配置如何拦截用户请求。auto-config='true'将自动配置几种常用的权限控制机制,包括form, anonymous, rememberMe。
我们利用intercept-url来判断用户需要具有何种权限才能访问对应的url资源,可以在pattern中指定一个特定的url资源,也可以使用通配符指定一组类似的url资源。例子中定义的两个intercepter-url,第一个用来控制对/admin.jsp的访问,第二个使用了通配符/**,说明它将控制对系统中所有url资源的访问。
在实际使用中,Spring Security采用的是一种就近原则,就是说当用户访问的url资源满足多个intercepter-url时,系统将使用第一个符合条件的intercept-url进行权限控制。在我们这个例子中就是,当用户访问/admin.jsp时,虽然两个intercept-url都满足要求,但因为第一个intercept-url排在上面,所以Spring Security会使用第一个intercept-url中的配置处理对/admin.jsp的请求,也就是说,只有那些拥有了ROLE_ADMIN权限的用户才能访问/admin.jsp。
access指定的权限部分比较有趣,大家可以注意到这些权限标示符都是以ROLE_开头的,实际上这与Spring Security中的Voter机制有着千丝万缕的联系,只有包含了特定前缀的字符串才会被Spring Security处理。目前来说我们只需要记住这一点就可以了,在教程以后的部分中我们会详细讲解Voter的内容。
user-service中定义了两个用户,admin和user。为了简便起见,我们使用明文定义了两个用户对应的密码,这只是为了当前演示的方便,之后的例子中我们会使用Spring Security提供的加密方式,避免用户密码被他人窃取。
最最重要的部分是authorities,这里定义了这个用户登陆之后将会拥有的权限,它与上面intercept-url中定义的权限内容一一对应。每个用户可以同时拥有多个权限,例子中的admin用户就拥有ROLE_ADMIN和ROLE_USER两种权限,这使得admin用户在登陆之后可以访问ROLE_ADMIN和ROLE_USER允许访问的所有资源。
与之对应的是,user用户就只拥有ROLE_USER权限,所以他只能访问ROLE_USER允许访问的资源,而不能访问ROLE_ADMIN允许访问的资源。
分享到:
相关推荐
此文章是记录博主在学习springsecurity时的笔记 第一步 创建一个SpringBoot工程,勾选上需要的依赖。 第二步 创建一个名为securityconfig的配置类,该类基础了父类WebSecurityConfigurerAdapter(提供用于创建...
02.Spring Security 初体验 03.基于内存定义 Spring Security 用户 04.Spring Security 自定义表单登录 05.Spring Security 登录表单配置细节 06.Spring Security 表单登录源码 07.Spring Security 中的 JSON 交互 ...
这个"spring-security初体验demo"很可能是为了帮助初学者理解如何在实际项目中集成和配置Spring Security。下面,我们将深入探讨Spring Security的核心概念、工作原理以及如何通过实践来设置一个简单的示例。 ...
SpringBoot+SpringSecurity+jwt整合详解 SpringBoot是当前最流行的Java框架之一,它提供了便捷的方式来构建基于Web的应用程序。然而,在构建Web应用程序时,安全性是不可忽视的重要方面。因此,本文将详细介绍如何...
在本文中,我们将深入探讨如何使用Google Authenticator与Spring Security集成,实现基于时间的一次性密码算法(TOTP)的双因素身份验证。这是一项重要的安全措施,它为应用程序提供了额外的安全层,防止未经授权的...
在初体验部分,博主可能会介绍如何设置Acegi以保护一个简单的Spring应用,包括配置Spring XML文件、定义安全拦截器(filter)以及创建用户凭证。 身份验证过程通常涉及用户登录,Acegi支持多种认证方式,如基于表单...
Spring Security是Spring框架的一个子项目,专注于安全控制,如身份验证、授权等,为Web应用提供了强大的安全保障。 Spring Boot是Spring框架的扩展,旨在简化Spring应用的初始设置和常规配置。它通过“起步依赖”...
《Spring开发指南》是一本专为Java开发者设计的详尽教程,无论你是初涉Spring框架的新手,还是希望深入理解并提升Spring应用的老手,它都能提供宝贵的指导。Spring是Java领域中最流行的轻量级开源框架之一,以其模块...
《Xfire初体验:探索Java Web服务框架》 在IT领域,Web服务是软件系统间交互的重要手段,而Xfire则是早期流行的一款基于Java的Web服务框架。它为开发者提供了构建和消费Web服务的便捷工具,尤其在XML-RPC和SOAP协议...
Spring Security可以用来实现用户认证和授权,确保博客系统的安全性。对于文章的分类与标签,可以使用树形结构或标签云来展示,提供灵活的文章组织方式。评论系统可以通过Ajax异步技术实现实时更新,提高用户体验。...
4、尚硅谷-SpringBoot高级-缓存-@Cacheable初体验 5、尚硅谷-SpringBoot高级-缓存-缓存工作原理&@Cacheable运行流程 6、尚硅谷-SpringBoot高级-缓存-@Cacheable其他属性 7、尚硅谷-SpringBoot高级-缓存-@CachePut 8...
Spring Boot与Spring Security集成,可以轻松地实现权限管理,确保系统安全。对于网约车预约系统,这尤为重要,因为需要区分乘客、司机和管理员的权限,例如,乘客只能预约车辆,司机可以接受或拒绝订单,而管理员则...
系统需要实现用户登录和权限管理,如使用Spring Security进行身份验证和授权。用户角色可能包括学生、教师和管理员,不同的角色对应不同的操作权限。 七、事务管理 在选课过程中,涉及多条数据库操作,如添加选课...
首先,系统设计之初,开发者通过Spring框架的IoC(Inversion of Control)和DI(Dependency Injection)特性,实现了松耦合的组件化设计,使得代码更易于维护和扩展。Spring的AOP(Aspect-Oriented Programming)...
- **后端**:采用Spring Boot框架简化开发过程,集成Spring Security实现安全控制。 - **数据库**:MySQL作为关系型数据库存储数据。 ##### 开发流程 1. **环境搭建**:配置开发环境,安装必要的软件工具。 2. **...
StrutsMenu可以与权限框架结合,如Spring Security或Apache Shiro,实现根据用户角色动态调整菜单的功能。 5. **源码阅读与定制**:作为开源工具,StrutsMenu的源码提供了学习和扩展的可能性。开发者可以根据自身...
SpringBoot集成了Spring Security,可以轻松实现用户的登录、注册、权限控制等功能。通过OAuth2或JWT(JSON Web Tokens)进行身份验证,确保用户数据的安全。 6. **支付集成** 如果平台包含付费课程,可以集成第...
9. **权限控制与安全**:项目可能包含了用户登录、注册功能,需要实现用户认证和授权机制,如Spring Security或Apache Shiro,防止未授权的访问。 10. **单元测试与集成测试**:通过JUnit或其他测试框架进行单元...
SpringBoot结合Spring Security或Apache Shiro等安全框架,可以轻松实现用户身份验证和授权。 2. **宠物信息管理**:记录宠物的基本信息,如品种、年龄、健康状况等。使用Spring Data JPA或MyBatis作为持久层框架,...
安全性方面,SSM框架本身就提供了权限管理和安全控制的功能,如Spring Security或Shiro,可以用来实现用户的登录验证、权限控制等。同时,前端Vue.js也需要考虑XSS、CSRF等安全问题,通过合理的数据绑定和验证机制来...