zoukankan      html  css  js  c++  java
  • 权限管理的介绍和Spring Security快速入门

    权限管理概念:

      权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。权限管理几乎出现在任何系统里面,前提是需要有用户和密码认证的系统。

      在权限管理的概念中,有两个非常重要的名词:
        认证:通过用户名和密码成功登陆系统后,让系统得到当前用户的角色身份。
        授权:系统根据当前用户的角色,给其授予对应可以操作的权限资源。

    完成权限管理需要三个对象:

      用户:主要包含用户名,密码和当前用户的角色信息,可实现认证操作。
      角色:主要包含角色名称,角色描述和当前角色拥有的权限信息,可实现授权操作。
      权限:权限也可以称为菜单,主要包含当前权限名称,url地址等信息,可实现动态展示菜单。
        注:这三个对象中,用户与角色是多对多的关系,角色与权限是多对多的关系,用户与权限没有直接关系,二者是通过角色来建立关联关系的。

    Spring Security 概念:

      Spring Security是spring采用AOP思想,基于servlet过滤器实现的安全框架。它提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。
    Spring Security 简单入门:

      1.引入相关坐标:

        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页面可以用。

    <!-- 并不需要把所有相关包都引入,因为maven有传递依赖的特性 -->
    <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-taglibs</artifactId>
                <version>5.1.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.security</groupId>
                <artifactId>spring-security-config</artifactId>
                <version>5.1.5.RELEASE</version>
            </dependency>

      2.配置web.xml

    <!--Spring Security过滤器链,注意过滤器名称必须叫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.配置spring-security.xml配置文件,文件名可以随便起

    <?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">
    
        <!-- 配置springSecurity -->
        <!--
         auto-config="true" 表示自动加载springSecurity的配置文件
         use-expressions="true" 表示使用spring的el表达式来配置springsecurity -->
        <security:http auto-config="true" use-expressions="true">
            <!-- 拦截资源 -->
            <!--
            pattern="/**" 表示拦截所有资源
            access="hasAnyRole('ROLE_USER')" 表示只有ROLE_USER角色才能访问资源  基于url授权 -->
            <security:intercept-url pattern="/**" access="hasAnyRole('ROLE_USER')"/>
        </security:http>
    
        <!-- 设置Spring Security认证用户信息的来源(一般不会这么使用,这里只是测试) -->
        <!--
        springSecurity默认的认证必须是加密的,加上{noop}表示不加密 -->
        <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>

      4.将spring-security.xml配置文件引入到applicationContext.xml中,这样才能被spring容器加载到

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

      5.运行测试

        并不会跳转到首页,因为上面配置只有 ROLE_USER 角色才能访问资源

        而 ROLE_USER 角色对应的用户是user,密码是user

        地址栏显示http://localhost:8080/login,跳转到了springsecurity定义的登录页面

        

        就是一个普通的form表单,但有一个 _csrf 的 input 隐藏输入框!

         

         在springsecurity定义的登录页面输入用户名user,密码user即可访问资源

      一个简单的入门案例引出一系列疑问:

        如何自定义认证页面?

        如何用数据库的信息进行认证,而不是写死在配置文件中?

      接下来几篇详细分析。

        SpringSecurity使用自定义认证页面和退出认证:https://www.cnblogs.com/roadlandscape/p/12482253.html

        SpringSecurity使用数据库数据完成认证:https://www.cnblogs.com/roadlandscape/p/12482260.html

        SpringSecurity设置用户状态:https://www.cnblogs.com/roadlandscape/p/12482281.html

  • 相关阅读:
    Javajdbc
    Web Project添加Struts2框架
    CSS去除免费虚拟主机的广告心得分享
    List<T>采用delegate快速实现排序、查找等操作
    ASP.NET视频采集站核心技术分析(附送对付搜索引擎蜘蛛的贱招)
    Azure完整实例:在线日程表
    [发布]ClouderaCMS: 基于Windows Azure的开源CMS
    获取配置文件节点的值
    asp.net DataGrid排序
    checkbox 获取选中的值
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12467808.html
Copyright © 2011-2022 走看看