zoukankan      html  css  js  c++  java
  • springSecurity初识练气初期

    1.写在前面

    Spring Security是一个框架,提供针对常见攻击的身份验证,授权和保护。通过对命令式和反应式应用程序的一流支持,它是保护基于Spring的应用程序的事实标准。

    Spring Security是spring AOP思想的具体实现。它基于servlet过滤器实现访问控制。它提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架 (画外音:学起来有点复杂,相对于Shiro)。

    2. Spring Security主要jar包功能介绍

    spring-security-core.jar
    核心包,任何Spring Security功能都需要此包。

    spring-security-web.jar
    web工程必备,包含过滤器和相关的Web安全基础结构代码。

    spring-security-config.jar
    用于解析xml配置文件,用到Spring Security的xml配置文件的就要用到此包。

    spring-security-taglibs.jar
    Spring Security提供的动态标签库,jsp页面可以用。

    3.基本使用

    3.1 与spring、springmvc整合

    第一步:在pom.xml中引入相关jar包

       <dependency>
               <groupId>org.springframework.security</groupId>
               <artifactId>spring-security-web</artifactId>
               <version>5.3.4.RELEASE</version>
           </dependency>
           <dependency>
               <groupId>org.springframework.security</groupId>
               <artifactId>spring-security-config</artifactId>
               <version>5.3.4.RELEASE</version>
           </dependency>
    

    第二步:配置web.xml,添加spring Sercuity过滤器链

    <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>
    

    注意:过滤器名称必须叫springSecurityFilterChain

    为啥?因为在过滤器链初始化的时候,它是根据id读取的web.xml得到springSecurityFilterChain的相关配置。

    第三步:添加spring security核心配置文件

    配置文件名称随便起

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:security="http://www.springframework.org/schema/security"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security.xsd">
    <!--设置可以用spring的el表达式配置Spring Security并自动生成对应配置组件(过滤器)-->
    <security:http auto-config="true" use-expressions="true">
    <!--使用spring的el表达式来指定项目所有资源访问都必须有ROLE_USER或ROLE_ADMIN角色-->
    <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>
    </security:http>
    <!--设置Spring Security认证用户信息的来源-->
    <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>
    

    关于配置文件的说明

    1. auto-config = “true”:表示自动加载spring security配置文件。这个值必须为true,不然将无法使用spring security;
    2. use-expressions="true" :使用spring的el表达式来配置springSecurity
    3. pattern=“/**”:拦截所有路径;
    4. access="hasAnyRole('ROLE_USER','ROLE_ADMIN')":必须要有ROLE_USER或者ROLE_ADMIN角色才能访问资源;
    5. {noop}:spring security默认是加密认证,添加此字段表示不加密认证。

    第四步:将spring security配置文件添加到spring配置文件中

    
        <!--引入SpringSecurity主配置文件-->
        <import resource="classpath:spring-security-config.xml"/>
    

    关于将spring security添加到spring容器而不是springMVC容器的说明:

    学过springMVC的同学都知道,当spring工程中引入springMVC后,整一个工程当中有两个IOC容器:父容器spring和子容器springMVC。子容器可以访问父容器的内容,而父容器不能访问子容器的内容。对于外界来说,它只能访问子容器springMVC而不能访问父容器spring。

    如果把spring容器比作一个国家的所有资源,那么springmvc容器就是这个国家提供给外界访问的一个关口。所有像访问这个国家的资源的人,都必须通过springmvc这个关口去访问。(提供凭证[参数]给controller,再由controller调用service完成资源访问)。

    所以,为了不暴露spring security的相关代码,故而我们将spring security加载到spring容器内。

    第五步:运行项目,打开浏览器输入http:127.0.0.1:8080/index即可看到如下效果,

    这个页面是spring security的默认登录页面。输入前面定义的username和password即可登录.

    同时,打开idea控制台可以发现抛出了AccessDeniedException,因为你还没有通过认证。

    END

    至此,关于spring security的入门案例就结束了。后面将逐步更新spring security的内容。

    此外,关于文章排序,在我的博客里暂时不用1、2、3、4、5、6而是使用修仙境界:炼气、筑基、结丹、元婴、化神、炼虚、合体、大乘等。
    代码下载:https://github.com/code81192/art-demo/tree/master/spring-security-demo1

  • 相关阅读:
    nagios对windows流量的检测
    Zabbix中文使用手册
    SNMP的应用
    十大经典排序算法最强总结(含JAVA代码实现)
    各种排序算法总结和比较
    MyBatis的Insert操作详解
    MyBatis 返回insert操作主键
    MyBatis insert/delete/update 的返回值
    利用aopc创建schema失败
    neo4j开发自定义存储过程注意事项
  • 原文地址:https://www.cnblogs.com/bingfengdev/p/13530081.html
Copyright © 2011-2022 走看看