zoukankan      html  css  js  c++  java
  • 关于Spring Security入门操作

    前几天偶然学习了spring secutity  现在分享一下 这个安全框架的一些基础使用

    首先先简单的看一下这个框架的介绍

    Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。
    (https://projects.spring.io/spring-security/) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别
    是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。人们使用Spring Security有很多种原因,不过通常吸
    引他们的是在J2EE Servlet规范或EJB规范中找不到典型企业应用场景的解决方案。 特别要指出的是他们不能再
    WAR 或 EAR 级别进行移植。这样,如果你更换服务器环境,就要,在新的目标环境进行大量的工作,对你的应用
    系统进行重新配 置安全。使用Spring Security 解决了这些问题,也为你提供很多有用的,完全可以指定的其他安
    全特性。 安全包括两个主要操作。
    “认证”,是为用户建立一个他所声明的主体。主题一般式指用户,设备或可以在你系 统中执行动作的其他系
    统。
    “授权”指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主题已经由 身份验证
    过程建立了。
    这些概念是通用的,不是Spring Security特有的。在身份验证层面,Spring Security广泛支持各种身份验证模式,
    这些验证模型绝大多数都由第三方提供,或则正在开发的有关标准机构提供的,例如 Internet Engineering Task
    Force.作为补充,Spring Security 也提供了自己的一套验证功能。
    Spring Security 目前支持认证一体化如下认证技术: HTTP BASIC authentication headers (一个基于IEFT RFC 的
    标准) HTTP Digest authentication headers (一个基于IEFT RFC 的标准) HTTP X.509 client certifificate exchange
    (一个基于IEFT RFC 的标准) LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境) Form-based
    authentication (提供简单用户接口的需求) OpenID authentication Computer Associates Siteminder JA-SIG
    Central Authentication Service (CAS,这是一个流行的开源单点登录系统) Transparent authentication context
    propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议)

    其实这个框架主要就是 建立认证和授权让我们的权限操作变得更加安全

    下面就是具体操作:

    第一步:我们要导入相应的依赖:(注意这个是基于spring 所以要记得导入spring 的maven 的依赖)

     <dependency> 
        <groupId>org.springframework.security</groupId>
         <artifactId>spring-security-web</artifactId> <version>5.0.1.RELEASE</version> 
    </dependency> 
    <dependency> 
        <groupId>org.springframework.security</groupId> 
        <artifactId>spring-security-config</artifactId> <version>5.0.1.RELEASE</version> 
    </dependency> 
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.itheima.springSecurity314</groupId>
      <artifactId>SpringSecurity314</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
        <spring.security.version>5.0.1.RELEASE</spring.security.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <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>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <!-- java编译插件 -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
              <encoding>UTF-8</encoding>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>

    第二步:我们要在我们的web.xml 里创建filter

    <!-- 配置加载类路径的配置文件 -->
      <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring-security.xml</param-value>
      </context-param>
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 委派过滤器 --> <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>

    第三步:是我们的最核心的配置, 我们要在 resources  里配置我们spring-security.xml文件, 也是securtiy 的核心配置 

    <?xml version="1.0" encoding="UTF-8"?>
    <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">        
              
        
        <!-- 配置不过滤的资源(静态资源及登录相关) -->
        <security:http security="none" pattern="/login.html" />
        <security:http security="none" pattern="/failer.html" />
        <security:http auto-config="true" use-expressions="false" >
            <!-- 配置资料连接,表示任意路径都需要ROLE_USER权限 -->
            <security:intercept-url pattern="/**" access="ROLE_USER" />
         
            <!-- 关闭CSRF,默认是开启的 -->
            <security:csrf disabled="true" />
        </security:http>
        <security:authentication-manager>
            <security:authentication-provider>
                <security:user-service>
                    <security:user name="user" password="{noop}user"
                        authorities="ROLE_USER" />
                    <security:user name="admin" password="{noop}admin"
                        authorities="ROLE_ADMIN" />
                </security:user-service>
            </security:authentication-provider>
        </security:authentication-manager>
    </beans>

    这里入门的 话我们就不进行数据库的交互了,然后 <security:user name="user" password="{noop}user"  authorities="ROLE_USER" />通过这个配置简单的添加了两个假用户接下来要进行操作

    咱们直接运行进入首页

     security 会自动进入拦截,拦截我们运行页面的初始页面然后在我们没有设置 自定义也面时,他会进入security 给我们提供的登入页面

    当我们输入正确的账户密码, 就会登入成功

     当我们登入admin 的时候  及不符合我们规定的权限

     我们会被提示 403 表示我们权限不足

     ok  大概使用方法就是这样

  • 相关阅读:
    86. Partition List
    2. Add Two Numbers
    55. Jump Game
    70. Climbing Stairs
    53. Maximum Subarray
    64. Minimum Path Sum
    122. Best Time to Buy and Sell Stock II
    以场景为中心的产品设计方法
    那些产品经理犯过最大的错
    Axure教程:如何使用动态面板?动态面板功能详解
  • 原文地址:https://www.cnblogs.com/sr990411/p/12817453.html
Copyright © 2011-2022 走看看