百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

手把手教你java中如何使用Spring security(一)

nanshan 2024-10-30 02:57 8 浏览 0 评论

背景

阅读本文你应该熟悉基本的Core Java,J2EE和Spring MVC的知识。

什么是Spring Security?

这是一个基于Java的安全解决方案。它主要适用于基于Spring框架构建的基于Java的Web应用程序。它为基于J2EE的企业软件应用程序提供全面的安全服务。它功能强大,灵活性更高。您可以非常轻松地将spring安全服务插入到您的应用程序中。

认证和授权是Spring Security中包含的两个主要操作。

1.身份验证是要求用户提供有效凭据来验明正身。
2.授权意味着验证登录用户对此应用程序具有哪些(或)特权。

Spring Security集成在您的应用程序中

在进入本文之前,我们先简要介绍一下Web应用程序的工作原理。

在Web应用程序中,执行过程通常如下。

  • 客户端在浏览器中输入URL请求Web页面。
  • 然后请求到达一个Servlet容器(例如Tomcat)
  • Servlet容器根据web.xml配置,查找到对应的处理程序servlet。
  • 然后,将请求发送到对应的Servlet
  • Servlet处理完请求将响应发回到Servlet容器
  • 最后,Servlet 容器将该响应发送到网络,最终被客户端Web浏览器接收到。

在这个过程中,J2EE中引入了Interceptor的概念。让您可以拦截或过滤Servlet容器和Servlet之间的请求,这样在请求到达Servlet之前,您可以执行一些预处理和后处理作业。

例如,您可以执行一些安全性操作,日志记录,甚至可以根据请求的类型或请求所来自的客户端类型将请求重定向到另一个URI。

有了以上的理论,下面我们就来看看一个案例:如何在您的解决方案中集成Spring Security以构建用户登录门户。

还是Web应用程序为例,用户只要在Web浏览器中输入并执行Web应用程序的URL,就会首先打开一个Login页面。用户必须输入他/她的登录凭据并提交它们进行身份验证。如果身份验证成功,则用户将被带到应用程序主页。如果身份验证失败,则用户将被带回登录页面。

注意:这里我将重点介绍通过Spring Security配置中定义的硬编码用户名进行身份验证。然后我将向您展示如何使用Spring Security通过数据库开发身份验证。

现在让我们看看如何使用Spring Security实现此应用程序逻辑。

Spring安全设置:

首先,您需要下载spring security依赖jar。以下是需要下载的3个基本jar,可以为基本身份验证和Web应用程序身份验证执行spring-security。

spring-security-config-3.2.7-RELEASE.jar
spring-security-core-3.2-RELEASE .jar
spring-security-web-3.2-RELEASE .jar

spring-security中还有其他jar提供其他高级身份验证技术,例如:LDAP身份验证,OpenID身份验证,身份验证中的实现记住我选项等。但在这里,我将重点关注Web应用程序身份验证。

在servlet配置xml文件或应用程序上下文xml中,您需要在<beans ..>标记的xsi:schemaLocation中指定以下URL 。

要启用Spring Security,您需要将以下过滤器添加到/WEB-INF/web.xml。

因此,在<filter>标签中,您需要定义filter-name和filter-class,就像为应用程序定义servlet-name和servlet-class一样。只不过这里filter-name和filter-class是固定的。

在<filter-mapping>标记中,您可以定义应该通过spring安全性检查的路径,一般是个正则表达式。

springSecurityFilterChain过滤器即DelegatingFilterProxy,就是servlet对应委托的过滤器和拦截器。拦截器内部进行我们的特殊动作,如:身份验证,授权。

Spring安全配置:

您需要在应用程序上下文xml文件(或servlet config xml文件)中的<beans ...> .... </ beans>标记下定义以下标记。

在<security:http ...>标记内,添加要保护的资源。如上所示,我使用<security:intercept-url>标记定义了四个拦截器。

在这里,我配备了几种校验,哪些URL允许所有用户(包括匿名用户)访问,哪些URL仅限于某些用户角色访问。

例如:

在上面的代码片段中“/login”,“/ resources /”路径开头的任何页面,都可以被包括匿名用户在内的所有人访问。

而“/ admin”路径,只有具备ADMIN角色的用户才可以访问,依此类推...

Spring-securitydh 提供了一个默认的内置登录页面,其中有两个文本框用于输入用户名和密码,还有一个提交按钮用于提交凭据以进行验证。您无需为应用程序设计登录表单。一旦用户在其浏览器上打开应用程序URL,spring-security将检查用户是否未登录,然后将用户重定向到spring-security提供的默认登录表单。

如果需要自定义登录页面,则可以将spring-security配置为使用自定义登录页面。您可以使用<security:form-login>标记在<security:http> ... </ security:http>标记内定义自定义登录表单页面。以下是配置示例。

在<security:form-login ...>标记中,

  • 在“login-page”中,您可以指定自定义登录页面URL路径。
  • 在“default-target-url”中,您可以指定用户在成功登录后应该导航的URL。
  • 在“authentication-failure-url”中,您可以指定用户在登录失败后应该导航的URL。
  • “username-parameter”和“password-parameter” - 这两个是可选的。默认情况下,spring-security在登录表单中接受参数名称“j_username”和“j_password”作为用户名和密码。如果要在登录表单中为用户名和密码输入字段指定任何其他名称,则可以在<security:form-login ...>标记中的这两个属性中指定自定义参数名称。

在<security:logout ...>标记中,

  • 在“logout-success-url”中,您可以指定在用户在退出登陆后,应该跳向哪个页面URL路径。

在</ security:http>标记结束后,您需要添加以下标记,即<security:authentication-manager>。这适用于身份验证管理器。

根据我们前面概述,为了安全,在用户请求到达Servlet之前,或者说在请求到达Spring Dispatcher Servlet之前, 我们需要进行身份验证和授权检查的预处理和后期处理。此段代码片断便是这个目的。

在上面的代码片段中,<security:authentication-manager>,<security:authentication-provider>和<security:user-service>用于身份验证。

<security:authentication-manager>用于绑定UserDetailServices*即用户信息库检查,并获得用户的身份和授予的权限。而前面的<security:http>是指用于安全检查或授权。

这就是Spring Security的基础设置和配置部分。 下一篇我们将讲述一些Spring Security的高级内容

思考:

security:http组件与security:authentication-manager组件的职责各是什么?

答:

security:http主要用来配置权限与资源的对应配置,比如访问一个资源url的条件,是需要什么role才能访问。

而security:authentication-manager主要是用来处理登陆认证过程。比如:如何校验你输入的用户名/密码是正确的?分完整的数据消息。

转发+转发+转发+私信关键词 【学习】 即可免费领取JAVA资料+面试文档!!!!!

相关推荐

服务器数据恢复—Raid5数据灾难不用愁,Raid5数据恢复原理了解下

Raid5数据恢复算法原理:分布式奇偶校验的独立磁盘结构(被称之为raid5)的数据恢复有一个“奇偶校验”的概念。可以简单的理解为二进制运算中的“异或运算”,通常使用的标识是xor。运算规则:若二者值...

服务器数据恢复—多次异常断电导致服务器raid不可用的数据恢复

服务器数据恢复环境&故障:由于机房多次断电导致一台服务器中raid阵列信息丢失。该阵列中存放的是文档,上层安装的是Windowsserver操作系统,没有配置ups。因为服务器异常断电重启后,rai...

服务器数据恢复-V7000存储更换磁盘数据同步失败的数据恢复案例

服务器数据恢复环境:P740+AIX+Sybase+V7000存储,存储阵列柜上共12块SAS机械硬盘(其中一块为热备盘)。服务器故障:存储阵列柜中有磁盘出现故障,工作人员发现后更换磁盘,新更换的磁盘...

「服务器数据恢复」重装系统导致XFS文件系统分区丢失的数据恢复

服务器数据恢复环境:DellPowerVault系列磁盘柜;用RAID卡创建的一组RAID5;分配一个LUN。服务器故障:在Linux系统层面对LUN进行分区,划分sdc1和sdc2两个分区。将sd...

服务器数据恢复-ESXi虚拟机被误删的数据恢复案例

服务器数据恢复环境:一台服务器安装的ESXi虚拟化系统,该虚拟化系统连接了多个LUN,其中一个LUN上运行了数台虚拟机,虚拟机安装WindowsServer操作系统。服务器故障&分析:管理员因误操作...

「服务器数据恢复」Raid5阵列两块硬盘亮黄灯掉线的数据恢复案例

服务器数据恢复环境:HPStorageWorks某型号存储;虚拟化平台为vmwareexsi;10块磁盘组成raid5(有1块热备盘)。服务器故障:raid5阵列中两块硬盘指示灯变黄掉线,无法读取...

服务器数据恢复—基于oracle数据库的SAP数据恢复案例

服务器存储数据恢复环境:某品牌服务器存储中有一组由6块SAS硬盘组建的RAID5阵列,其中有1块硬盘作为热备盘使用。上层划分若干lun,存放Oracle数据库数据。服务器存储故障&分析:该RAID5阵...

「服务器虚拟化数据恢复」Xen Server环境下数据库数据恢复案例

服务器虚拟化数据恢复环境:Dell某型号服务器;数块STAT硬盘通过raid卡组建的RAID10;XenServer服务器虚拟化系统;故障虚拟机操作系统:WindowsServer,部署Web服务...

服务器数据恢复—RAID故障导致oracle无法启动的数据恢复案例

服务器数据恢复环境:某品牌服务器中有一组由4块SAS磁盘做的RAID5磁盘阵列。该服务器操作系统为windowsserver,运行了一个单节点Oracle,数据存储为文件系统,无归档。该oracle...

服务器数据恢复—服务器磁盘阵列常见故障表现&amp;解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对...

「服务器数据恢复」IBM某型号服务器RAID5磁盘阵列数据恢复案例

服务器数据恢复环境:IBM某型号服务器;5块SAS硬盘组成RAID5磁盘阵列;存储划分为1个LUN和3个分区:第一个分区存放windowsserver系统,第二个分区存放SQLServer数据库,...

服务器数据恢复—Zfs文件系统下误删除文件如何恢复数据?

服务器故障:一台zfs文件系统服务器,管理员误操作删除服务器上的数据。服务器数据恢复过程:1、将故障服务器所有磁盘编号后取出,硬件工程师检测所有硬盘后没有发现有磁盘存在硬件故障。以只读方式将全部磁盘做...

服务器数据恢复—Linux+raid5服务器数据恢复案例

服务器数据恢复环境:某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。服务器故障&检测:服务器在运行过程中突然瘫痪,...

服务器数据恢复—Sql Server数据库数据恢复案例

服务器数据恢复环境:一台安装windowsserver操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...

服务器数据恢复—阿里云ECS网站服务器数据恢复案例

云服务器数据恢复环境:阿里云ECS网站服务器,linux操作系统+mysql数据库。云服务器故障:在执行数据库版本更新测试时,在生产库误执行了本来应该在测试库执行的sql脚本,导致生产库部分表被tru...

取消回复欢迎 发表评论: