栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringSecurity学习笔记1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringSecurity学习笔记1

一、简单配置

1.配置文件中自定义用户密码

application.yml

#配置文件中自定义用户名密码
spring:
  security:
    user:
      name: llb
      password: 123456

2.关闭验证功能

//排除security的配置,让它不起作用
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
二、基于内存管理用户

1.在配置类中配置用户密码信息

写一个配置类继承WebSecurityConfigurerAdapter,实现父类的configure(AuthenticationManagerBuilder auth)方法

@Configuration//表示当前类是一个配置类,在这个类中方法的返回值是java对象,这些对象放入到Spring容器中
@EnableWebSecurity//启用SpringSecurity安全框架的功能
//ctrl+o 重写父类方法
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
    //在方法中来配置用户和密码的信息,作为登录的数据
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder pe = passwordEncoder();
        auth.inMemoryAuthentication().withUser("user").password(pe.encode("123456")).roles();
        auth.inMemoryAuthentication().withUser("admin").password(pe.encode("123456")).roles();
    }
    //创建密码的加密类
    //@Bean:把方法返回值的对象放入到spring容器中
    @Bean
    public PasswordEncoder passwordEncoder(){
        //创建PasswordEncoder的实现类
        return new BCryptPasswordEncoder();
    }
}

2.设置角色访问权限

2.1在configure(AuthenticationManagerBuilder auth)方法中使用.roles()设置用户所拥有的角色

2.2使用注解启用方法级别的认证

@EnableGlobalMethodSecurity(prePostEnabled = true)

ps:prePostEnabled=true表示可以使用@PreAuthorize和@PostAuthrize

配置类代码如下:

@Configuration//表示当前类是一个配置类,在这个类中方法的返回值是java对象,这些对象放入到Spring容器中
@EnableWebSecurity//启用SpringSecurity安全框架的功能
@EnableGlobalMethodSecurity(prePostEnabled = true)//启用方法级别的认证 prePostEnabled=true表示可以使用@PreAuthorize和@PostAuthrize
//ctrl+o 重写父类方法
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
    //在方法中来配置用户和密码的信息,作为登录的数据
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        PasswordEncoder pe = passwordEncoder();

        //定义两个角色 normal,admin
        auth.inMemoryAuthentication()
                .withUser("user")
                .password(pe.encode("123456"))
                .roles("normal");
        auth.inMemoryAuthentication()
                .withUser("admin")
                .password(pe.encode("123456"))
                .roles("admin","normal");
    }
    //创建密码的加密类
    //@Bean:把方法返回值的对象放入到spring容器中
    @Bean
    public PasswordEncoder passwordEncoder(){
        //创建PasswordEncoder的实现类
        return new BCryptPasswordEncoder();
    }
}

Controllerr代码如下:

    //normal,admin都可以访问
    @RequestMapping("/helloUser")
    @ResponseBody
    @PreAuthorize(value = "hasAnyRole('admin','normal')")
    public String helloCommonUser(){
        return "Hello user";
    }

    //admin才能访问
    @RequestMapping("/helloAdmin")
    @ResponseBody
    @PreAuthorize(value = "hasAnyRole('admin')")
    public String helloAdmin(){
        return "Hello admin";
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号