JavaWeb进阶修炼手册35---spring-security(一)概述及入门案例

1. 今日内容

2. spring-security概述

1. 为什么学习spring-security?
	* spring-security框架是一套专门针对于权限处理的一套解决方案,比如登入操作,不同的用户有不同的权限。当然这个登入操作我们使用拦截器或
		者过滤器也可以实现,并在这样更加的轻量级。但是,在实际的开发过程中,针对于权限的操作不止限于登入操作,还有一系列其他的操作,比
		如记住密码,session管理等等。而这些,spring-security都已经帮我们生成了相应的工具,我们进行配置和调用就可以使用。

2. spring-security介绍
	* Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别 是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。人们使用
		Spring Security有很多种原因,不过通常吸 引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。 特别要指出的是
		他们不能再 WAR 或 EAR 级别进行移植。这样,如果你更换服务器环境,就要,在新的目标环境进行大量的工作,对你的应用 系统进行重新配 
		置安全。使用Spring Security 解决了这些问题,也为你提供很多有用的,完全可以指定的其他安 全特性。 安全包括两个主要操作。 
			1. “认证”,是为用户建立一个他所声明的主体。主题一般式指用户,设备或可以在你系统中执行动作的其他系统。 
			2. “授权”指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主题已经由 身份验证 过程建立了。

3. Spring Security 目前支持认证一体化如下认证技术
	1.  HTTP BASIC authentication headers (一个基于IEFT RFC 的 标准) 
	2. HTTP Digest authentication headers (一个基于IEFT RFC 的标准)
	3.  HTTP X.509 client certificate exchange (一个基于IEFT RFC 的标准) 
	4. LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境) 
	5. Form-based authentication (提供简单用户接口的需求) 
	6. OpenID authentication Computer Associates Siteminder JA-SIG Central Authentication Service (CAS,这是一个流行的开源单点登录系统) 		
	7. Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议) 

2. spring-security入门案例

2.1 在pom.xml文件中导入依赖

<spring.security.version>5.0.1.RELEASE</spring.security.version>
<!-- spring-security的jar包 -->
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-web</artifactId>
  <version>${spring.security.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-config</artifactId>
  <version>${spring.security.version}</version>
</dependency>

2.2 创建 spring-security.xml配置文件并配置

resources目录下建立spring-security.xml,并配置:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:security="http://www.springframework.org/schema/security"
       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.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security.xsd">

    <!--
        1. auto-config="true" 是自动配置,能够启动帮我们生成一个登入验证的页面
        2. use-expressions="false" 不使用 hasRole('ROLE_USER') 表达,
            如果不写,默认为true,则需要写<security:intercept-url pattern="/**" access="hasRole('ROLE_USER')"/>
            否则会报错
        3. intercept-url定义一个过滤规则 pattern表示对哪些url进行权限控制。/** 表示对所有url
        4. ccess属性表示在请求对应 的URL时需要什么权限,里面必须以ROLE_开头。即ROLE_XXX
            如果有多个权限用逗号隔开 "ROLE_USER,ROLE_ADMIN"
    -->
    <security:http auto-config="true" use-expressions="false">
        <security:intercept-url pattern="/**" access="ROLE_USER"/>
    </security:http>

    <!-- 构造用户。实际开发过程中不配置一下代码,是从数据库中读取用户,但是此代码对整合测试阶段非常有用 -->
    <security:authentication-manager>
        <security:authentication-provider>
            <security:user-service>
            	<!-- 密码前面需要带{noop},不然不能识别密码 -->
                <security:user name="zhangsan" password="{noop}123" authorities="ROLE_USER"></security:user>
            </security:user-service>
        </security:authentication-provider>
    </security:authentication-manager>

</beans>

注意:

  1. 设置 use-expressions=“false”
  2. ccess属性表示在请求对应 的URL时需要什么权限,里面必须以ROLE_开头。即ROLE_XXX
  3. 密码前面需要带{noop},不然不能识别密码
  4. 实际开发过程中,不会构造用户,用户是从数据库中读取的。
  5. 当指定http元素的auto-config=”true”时,就相当于如下内容的简写:
      <security:http>
		   <security:form-login/>
		   <security:http-basic/>
		   <security:logout/> 		
      </security:http> 

这些元素负责建立表单登录、基本的认证和登出处理。它们都可以通过指定对应的属性来改变它们的行为。

2.3 在 web.xml文件中加载spring-security.xml文件

<!-- 配置加载类路径的配置文件 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml,classpath:spring-security.xml</param-value>
</context-param>
<!-- 配置Spring的监听器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

注意:classpath:applicationContext是spring的配置文件,如果你不是spring项目,可以只写<param-value>classpath:spring-security.xml</param-value>

<!-- 配置哪些请求交给springSecurity处理,是第一个filter,在springmvc的filter之前 -->
<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>

注意:上面的springSecurity的过滤器可以自动生成:
在这里插入图片描述

2.4 检测spring-security是否配置成功

启动项目,访问项目http://localhost/springSecurity/
在这里插入图片描述
输入一个错误的用户:
在这里插入图片描述
输入正确的用户后,就允许的跳到指定的index.jsp页面了, 因为http://localhost/springSecurity/访问的是index.jsp页面:
在这里插入图片描述
如果能够出现上面三种情况,则入门成功!!!

猜你喜欢

转载自blog.csdn.net/qq_43546676/article/details/105308587