写点什么

Java 中使用 Spring-security(一)

  • 2022 年 4 月 24 日
  • 本文字数:2100 字

    阅读完需:约 7 分钟

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 页面。用户必须输入他/她的登录凭据并提交它们进行身份验证。如果身份验证成功,则用户将被带到应用程序主页。如果身份验证失败,则用户将被带回登录页面。


注意这里我 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 将重点介绍通过 Spring Security 配置中定义的硬编码用户名进行身份验证。然后我将向您展示如何使用 Spring Security 通过数据库开发身份验证。


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

Spring 安全设置:

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


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


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


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


<beans xmlns="http://www.springframework.org/schema/beans"


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


xmlns:security="http://www.springframework.org/schema/security"


xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/securityhttp://www.springframework.org/schema/security/spring-security-3.1.xsd">............</beans>


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


<filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping>


因此,在*<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>*标记下定义以下标记。


" access="permitAll" /><security:intercept-url pattern="/" access="hasRole('USER')" /><security:intercept-url pattern="/admin**" access="hasRole('ADMIN')" />


<security:form-login />


在*<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:http auto-config="true" use-expressions="true">


<security:intercept-url pattern="/login**" access="permitAll" />

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
Java中使用Spring-security(一)_Java_爱好编程进阶_InfoQ写作社区