Spring Security安全框架的整合使用

  今天分享关于Spring Security在Spring Boot中的整合使用。

  Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准。Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。像所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求(来自官方翻译)。简单地说,原理性知识请看其他的博主,这里我不在详说。emmmmm…

  第一步导入jar包,springboot搭建项目,maven管理jar包

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

  然后进行简单的测试
编写控制层

/**
 * 测试接口
 * 通过权限设置访问接口
 */
@RestController
@RequestMapping("/security")
public class SecurityApi {

    @GetMapping("/test1")
    public Res test1() {
        return Res.success("test1....");
    }

    @GetMapping("/test2")
    public Res test2() {
        return Res.success("test2....");
    }
	.....
}

编写Security配置,并添加权限访问

@EnableWebSecurity //开启security
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    //重写方法
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //添加访问权限
        http.authorizeRequests()
                .antMatchers("/security/test1").permitAll() ///security/test1允许所有人访问
                .antMatchers("/security/test2").hasRole("vip1") //用户拥有权限次才能访问
                .antMatchers("/security/test3").hasRole("vip2") //用户拥有权限次才能访问
                .antMatchers("/security/test4").hasRole("vip3") //用户拥有权限次才能访问
                .antMatchers("/security/test5").hasRole("vip4");//用户拥有权限次才能访问

		//没有权限自动跳转到登录界面
        http.formLogin();
    }
}

  "/security/test1"接口是所有人都可以访问的,在浏览器中能等到正确的返回值
在这里插入图片描述
  但是,当我访问其他几个接口时,浏览器就访问不了,提示403没有权限拒绝访问
在这里插入图片描述

  如果需要访问,就需要给用户进行授权,接下来就开始演示授权功能,同样的在Security配置写认证方法

    //认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()//在内存在授权,直接将用户存在内存中,因为我还没去设计数据库,jdbcAuthentication 数据库授权
                .withUser("admin1").password("root1").roles("vip1")
                .and()//开始拼接下一个
                .withUser("admin2").password("root2").roles("vip2")
                .and()//开始拼接下一个
                .withUser("admin3").password("root3").roles("vip3")
                .and()//开始拼接下一个
                .withUser("admin4").password("root4").roles("vip4");
    }

  测试认证功能,在授权中开启了"没有权限自动跳转到登录界面",在登录界面登录设置的用户名和密码,然后会抛出一个错误,这个原因是在设置时是明文密码,没有对密码进行加密,所以在设置时需要对密码进行加密
在这里插入图片描述
  在认证时进行密码加密,BCryptPasswordEncoder只是其中的一种,官方推荐,也可以使用其他的如MD5

    //认证
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //在内存在授权,直接将用户存在内存中,因为我还没去设计数据库,jdbcAuthentication 数据库授权
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("admin1").password(new BCryptPasswordEncoder().encode("root1")).roles("vip1")
                .and()//开始拼接下一个
                .withUser("admin2").password(new BCryptPasswordEncoder().encode("root2")).roles("vip2")
                .and()//开始拼接下一个
                .withUser("admin3").password(new BCryptPasswordEncoder().encode("root3")).roles("vip3")
                .and()//开始拼接下一个
                .withUser("admin4").password(new BCryptPasswordEncoder().encode("root4")).roles("vip4");
    }

  重启项目重新测试,然后就能得到对应的返回数据了
在这里插入图片描述

  关于以上代码,建议大家下载源码,在源码中已经给了很详细的注释了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

華小灼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值