zoukankan      html  css  js  c++  java
  • SpringSecurity01

    SpringSecurity简介

    权限管理的主流框架

    1. SpringSecurity
      1. 是Spring家族中的一个安全管理框架, 能和Spring无缝整合.
      2. 全面的权限控制
      3. 专门为web环境开发
        • 旧版不能脱离web环境
        • 新版对整个框架进行了分层抽取, 分成了核心模块和web模块, 单独引入核心模块即可脱离web环境.
      4. 是一款重量级框架
    2. Shiro
      1. 轻量级, 把复杂变简单, 针对性能有高要求的互联网应用有更好的表现.
      2. 通用性
        • 好处: 不局限于web环境, 可以脱离web环境使用.
        • 缺陷: 在web环境下一些特定的需求需要手动编写代码定制.

     

    SpringSecurity的核心功能

    1. 认证(你是谁)
    2. 授权(你能干什么)
    3. 攻击防护(防止伪造)
    4. 本质上来讲, 其核心就是一组过滤器链.

    SpringSecurity用法简介

    1. 用户登录系统时我们需要协助springsecurity把用户对应的角色, 权限组装好, 同时把各个资源所要求的权限信息设定好.
    2. 剩下的"登陆验证", "权限验证"等工作都交给springsecurity去做.
    3. 我们用一张图描述这个过程

    权限过程中相关的概念

    1. 主体(principal)
      1. 使用系统的用户或设备或从其它系统远程登录的用户等.
      2. 简单点说, 谁使用系统谁就是主体.
    2. 认证(authentication)
      1. 权限管理系统确认一个主体的身份, 允许主体进入系统.
      2. 简单的说就是主体证明自己是谁
      3. 笼统的认为就是登陆操作.
    3. 授权(authorization)
      1. 将系统的权力授予主体, 这样主体就具备了系统中特定功能的能力.
      2. 简单的说授权就是给用户分配权限.

    准备使用环境

    1. 创建maven的web工程
    2. 加入SpringMVC环境所需依赖
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-webmvc</artifactId>
                  <version>4.3.20.RELEASE</version>
              </dependency>
              <!-- 引入Servlet容器中相关依赖 -->
              <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                  <version>3.1.0</version>
                  <scope>provided</scope>
              </dependency>
      
              <!-- JSP页面使用的依赖 -->
              <dependency>
                  <groupId>javax.servlet.jsp</groupId>
                  <artifactId>javax.servlet.jsp-api</artifactId>
                  <version>2.3.1</version>
                  <scope>provided</scope>
              </dependency>
    3. 创建SpringMVC配置文件
          <context:component-scan
              base-package="xxx"></context:component-scan>
      
          <bean
              class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix" value="/WEB-INF/views/"></property>
              <property name="suffix" value=".jsp"></property>
          </bean>
      
          <mvc:annotation-driven></mvc:annotation-driven>
          <mvc:default-servlet-handler />
    4. 在web.xml中配置DispatcherServlet
          <servlet>
              <servlet-name>springDispatcherServlet</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              <init-param>
                  <param-name>contextConfigLocation</param-name>
                  <param-value>classpath:spring-mvc.xml</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
          </servlet>
      
          <servlet-mapping>
              <servlet-name>springDispatcherServlet</servlet-name>
              <url-pattern>/</url-pattern>
          </servlet-mapping>

    加入SpringSecurity

    1. 加入SpringSecurity依赖
              <!-- SpringSecurity对Web应用进行权限管理 -->
              <dependency>
                  <groupId>org.springframework.security</groupId>
                  <artifactId>spring-security-web</artifactId>
                  <version>${bw.spring.security.version}</version>
              </dependency>
      
              <!-- SpringSecurity配置 -->
              <dependency>
                  <groupId>org.springframework.security</groupId>
                  <artifactId>spring-security-config</artifactId>
                  <version>${bw.spring.security.version}</version>
              </dependency>
      
              <!-- SpringSecurity标签库 -->
              <dependency>
                  <groupId>org.springframework.security</groupId>
                  <artifactId>spring-security-taglibs</artifactId>
                  <version>${bw.spring.security.version}</version>
              </dependency>
    2. 加入SpringSecurity控制权限的Filter
      1. SpringSecurity中使用过滤器Filter而不是拦截器Interceptor, 意味着SpringSecurity能够管理的不仅仅是SpringMVC中的controller请求, 还包含了web应用中的所有请求, 从而进行权限控制.
      2. SpringSecurity会根据DelegatingFilterProxy中的filter-name到IOC容器中查找所需要的bean, 所以filter-name必须是springSecurityFilterChain
            <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>
    3. 加入配置类
          //当前类标记为配置类
          @Configuration
          // 启用web环境下权限控制功能
          @EnableWebSecurity
          public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
          
          }
      1. Enable理解为启用, 而@EnableWebSecurity注解表示启用Web安全功能.
      2. 必须要继承WebSecurityConfigurerAdapter, 该类里有其默认配置.
    4. 配置类中两个重要方法说明
              @Override
              protected void configure(AuthenticationManagerBuilder builder) throws Exception {
                  //跟SpringSecurity环境下用户登录相关
      
              }
      
              @Override
              public void configure(HttpSecurity security) throws Exception {
                   //跟SpringSecurity环境下请求授权相关
      
              }    
    5. 效果
      1. 所有请求都被SpringSecurity拦截, 登录以后才能访问.
      2. 静态资源也被拦截, 登陆失败有错误提示.
  • 相关阅读:
    如何制定自己的博客园皮肤
    Notepad++ PluginManager安装常用插件
    Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块
    Python进阶4---Python的文件IO
    Python进阶3---python类型注解、functools
    dreamweavercs 和dreamweaver cc的區別
    Dreamweaver怎样用Edge Web Fonts功能
    vs code軟件操作
    vscode git設置
    git和svn的區別
  • 原文地址:https://www.cnblogs.com/binwenhome/p/12707667.html
Copyright © 2011-2022 走看看