Spring Security OAuth2.0认证授权

Spring Security OAuth2.0认证授权

以Security6.3.1为例,低版本与此相比有部分差异

快速上手

一:创建SpringBoot工程引入Maven依赖

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

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

此时启动工程,项目已纳入Spring Security管理,访问http://localhost:8080/项目地址/login会进入到security提供的登陆界面,低版本控制台会打印初始密码。

在这里插入图片描述

二:创建配置类,继承WebSecurityConfigurerAdapter

注意:在 Spring Security 6 中,WebSecurityConfigurerAdapter 完全被移除,因此不能再继承它来配置安全设置。应该使用@EnableWebSecurity来替代

分为3部分

1:定义用户信息服务(查询用户信息)

@Bean
    public UserDetailsService userDetailsService(){
        //获取用户信息,此处为内存存储
        UserDetails userDetails = User.withUsername("chenyi").password("123456").authorities("admin").build();
        UserDetails userDetails2 = User.withUsername("cy").password("123456").authorities("user").build();
        UserDetails userDetails3 = User.withUsername("test").password("123456").build();
        return new InMemoryUserDetailsManager(userDetails,userDetails2,userDetails3);
    }

2:配置密码加密方式

@Bean
public PasswordEncoder passwordEncoder(){
    return NoOpPasswordEncoder.getInstance();
}

3:配置安全拦截机制

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    //当一个请求到达时,Spring Security会从上至下检查这些规则,直到找到第一个与请求URL匹配的规则为止。
    // 一旦找到匹配的规则,就会应用该规则定义的安全约束,并且不再继续检查下面的规则。
    http
            .authorizeHttpRequests((requests) -> requests
                    .requestMatchers("/test/admin/**").hasAuthority("admin")//web授权,访问/admin/**需要ADMIN权限
                    .requestMatchers("/test/user/**").hasAuthority("user")//访问/user/**需要USER或者ADMIN权限
                    .requestMatchers("/test/**").authenticated()//访问/test/**需要认证
                    .anyRequest().permitAll()//其他请求不需要认证
            )
            .formLogin((form) -> form
                    //.loginPage("/login")//自定义登录页面
                    .failureUrl("https://www.baidu.com/")//失败跳转路径
                    .permitAll()//允许所有用户访问
            )
            .logout((logout) -> logout.permitAll());//登出界面允许所有用户访问
    return http.build();
}

在这里插入图片描述
无权限访问的会返回403
在这里插入图片描述
更多内容文章请访问

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值