zoukankan      html  css  js  c++  java
  • Spring Security初识

    Spring Security与Spring Boot集成
    添加依赖:

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity4 -->
    <dependency>
    	<groupId>org.thymeleaf.extras</groupId>
    	<artifactId>thymeleaf-extras-springsecurity4</artifactId>
    	<version>3.0.2.RELEASE</version>
    </dependency>
    
    <!-- h2 database测试时使用的数据库 -->
    <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
    </dependency>
    

    3.1 权限管理

    基于角色的权限管理

    什么是角色?

    • 代表一系列行为或责任的实体
    • 限定了角色能做什么,不能做什么
    • 用户账号往往与角色相关联

    RBAC

    • 基于角色的访问控制(Role-Based Access Control)
    • 隐式访问控制
    if(user.hasRole("Project Manager")){
    	// 显示报表按钮
    } else {
        // 不显示报表按钮
    }
    
    • 显示访问控制(更加灵活)
    if(user.isPermitted("projectReport:view:12345")){
    	// 显示报表按钮
    } else {
        // 不显示报表按钮
    }
    

    权限解决方案框架:

    • Apache Shiro

    • Spring Security

    3.2 Spring Security实战

    1)后台编码

    • 安全配置类
    package com.fei.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    /**
     * 安全配置类 Created by zxf on 2019年10月10日
     */
    @EnableWebSecurity // 启用注解安全
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    	/**
    	 * 自定义拦截策略
    	 */
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
    
    		http.authorizeRequests().antMatchers("/css/**", "/js/**", "/fonts/**", "/index").permitAll()// 都可以访问
    				.antMatchers("/users/**").hasRole("ADMIN")// 需要相应的角色才能访问
    				.and().formLogin()// 基于form表单登录验证
    				.loginPage("/login").failureUrl("/login-error");// 自定义登录界面
    		super.configure(http);
    	}
    
    	/**
    	 * 认证信息管理
    	 * 
    	 * @param auth
    	 * @throws Exception
    	 */
    	@Autowired
    	public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    
    		auth.inMemoryAuthentication()// 认证信息存储在内存中
    				.withUser("fei").password("123").roles("ADMIN");
    	}
    
    }
    
    • 控制器
    package com.fei.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    /**
     * 处理首页、登录
     * Created by zxf on 2019年10月10日
     */
    @Controller
    public class MainController {
    	@GetMapping("/")
    	public String root() {
    		return "redirect:/index";
    	}
    
    	@GetMapping("/index")
    	public String index() {
    		return "index";
    	}
    
    	@GetMapping("/login")
    	public String login() {
    		return "login";
    	}
    
    	@GetMapping("/login-error")
    	public String loginError(Model model) {
    		model.addAttribute("loginError", true);
    		model.addAttribute("errorMsg", "登录失败,用户名或密码错误!");
    		
    		return "login";
    	}
    }
    
  • 相关阅读:
    第一次个人作业-热身
    OO总结
    oo第三单元总结
    oo第二单元总结
    软件工程 —— 课程回顾与个人总结
    BUAA软件案例分析——智能表单抽取识别
    软件工程—结对项目博客
    轨迹预测文献阅读整理(轨迹多样性、车辆轨迹、图神经网络、潜码)
    软件工程
    软件工程
  • 原文地址:https://www.cnblogs.com/zxfei/p/11651081.html
Copyright © 2011-2022 走看看