暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Java安全框架(一):Spring Security基础

一叶扁舟 2020-08-27
4105

Java安全框架(二):Spring Security工作原理
Java安全框架(三):JWT(Json Web Token)
Java安全框架(四):Spring Security + JWT综合应用(流程梳理)

一、概述

1、什么是Spring Security

Spring Security是一个安全框架

2、相对于Shiro的优缺点

  • 优点
    Spring Security基于Spring开发,权限更加方便,功能更强大、社区资源更丰富、可以和Spring Boot,Spring Cloud无缝集成。

  • 缺点
    与Shiro相比,其配置和使用比较复杂,并且比较依赖Spring容器。

  • 选择原因
    Spring Boot,Spring Cloud出来之后,简化了Spring Security的配置。

3、核心功能

(1)认证:通过用户名和密码登录后,让系统知道当前用户的角色(确认用户是否可以访问当前系统)
(2)授权:系统根据当前用户的角色,授予对应的权限(确认用户在当前系统下拥有的权限)

4、三个对象

image.png

二、First Spring Security

1、配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2、默认用户名密码

  • 运行生成默认密码
// 原理:通过uuid生成默认密码
Private String password = UUID.randomUUID().toString()

image.png

  • 访问/hello自动跳转/login,登陆后跳转/hello
    image.png
    image.png

3、在配置文件中设置用户名密码

由于密码是根据uuid随机生成的,每次启动密码都会改变,所以,可以在配置文件中配置用户名和密码,设置之后,控制台就不会再输出密码了。登录直接输入自己设置的用户名和密码即可。

spring:
  security:
    user:
      name: yang
      password: 1234

三、基于内存的认证和授权

1、基于内存的认证

  • 编写配置文件,继承 WebSecurityConfigurerAdapter 重写configure方法,指定用户名和密码(会覆盖掉配置文件中的用户名和密码)
  • 要配置加密方式不然会报错。
@Configuration
@EnableWebSecurity // 启用Spring Security
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Bean // BCryptPasswordEncoder加密方式
    public PasswordEncoder passwordEncoder(){
        //return new BCryptPasswordEncoder(); // 使用bcr方式加密
        return NoOpPasswordEncoder.getInstance(); // 不加密
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("yang")
                .password("123")
                .roles("admin")
                .and()
                .withUser("meng")
                .password("123")
                .roles("user");
    }
}

2、基于内存的角色授权

(1)给用户指定角色
上面认证的时候,添加.roles("user”) 即为给用户指定了角色

(2)在方法上添加注解
@EnableGlobalMethodSecurity(prePostEnabled = true) // 会拦截注解了@PreAuthrize注解的配置

(3)授权

@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String hello(){
        return "Hello Spring Security";
    }

    @GetMapping("/helloAdmin")
    @PreAuthorize("hasAnyRole('admin')") // 只有admin可以访问
    public String helloAdmin(){
        return "Hello Spring Security Admin";
    }

    @GetMapping("/helloUser")
    @PreAuthorize("hasAnyRole('admin', 'user')") // admin和user都可以访问
    public String helloUser(){
        return "Hello Spring Security User";
    }
}

最后修改时间:2020-08-27 14:30:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论