security初步使用(2)

6 web权限方案

  • 认证
  • 授权

6.1 设置登录的用户名和密码

方式1:配置文件
spring:
    datasource:
        url: jdbc:mysql://xxx.xx.xx.xx:xxxx/xxxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
    security:
      user:
          name: admin
          password: 123456

测试自定义的用户名和密码是否能成功登录

在这里插入图片描述

访问接口

http://localhost:8080/xxxx/xxxx/xxxx/history?shipName=%E7%99%BD%E6%B4%8B%E6%B7%80001&interval=2

成功获取数据

{"information":[],"shipName":"白洋淀001"}
方式2:配置类

不用yml配置的情况,可以写一个配置类,重写configure方法,在方法里面设置登录的用户名或者密码

/**
 * security配置
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //对密码进行加密处理
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String password = passwordEncoder.encode("123456");
        //当然,也可以加入角色
        auth.inMemoryAuthentication().withUser("admin").password(password).roles("admin");
    }
    
    @Bean
    PasswordEncoder password(){
        return new BCryptPasswordEncoder();
    }
}

测试结果同上6.1

方式3:自定义编写实现类(*********)----重点

上述两种方式都不太舒服,一般对于用户来说,都是将数据存到数据库的

因此一般来说都是实现UserDetailsService接口,自定义编写实现类。

security一般会先找配置文件或者是配置类,如果没有找到,则会去找UserDetailsService接口,找到数据库查询出的用户名和密码,进行认证

  • 第一步 创建配置类,设置使用哪一个UserDetailsService的实现类
/**
 * security配置
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 注入UserDetailsService
     */
    @Autowired
    private UserDetailsService userDetailsService;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //指定用到哪一个UserDetailsService
        auth.userDetailsService(userDetailsService).passwordEncoder(password());
    }
    @Bean
    PasswordEncoder password(){
        return new BCryptPasswordEncoder();
    }
}

  • 第二步 编写实现类,返回User对象,User对象有用户名密码和操作权限

    @Service("userDetailsService")
    public class ShipUserServiceImpl implements UserDetailsService {
        //查询数据库的用户信息的mapper
        @Autowired
        private UserMapper userMapper;
        @Override
        public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
            String name = "";
            String password = "";
            //String role = "";
            //查询数据库,得到用户名,密码,权限  这个User是自定义的User用户类
            User user =  userMapper.getUserByUserName(userName);
            System.out.println(user);
            try{
                name = user.getAppId();
                password = user.getAppKey();
                // role = user.getRole();
            }catch (Exception e){
                throw new RuntimeException("查无此人");
            }
            String role = "admin";
            //用户角色
            List<GrantedAuthority> auths = AuthorityUtils.commaSeparatedStringToAuthorityList(role);
            return new org.springframework.security.core.userdetails.User(name, new BCryptPasswordEncoder().encode(password), auths);
        }
    }
    

    访问连接:

    http://localhost:8080/xxxx/xxxx/xxxx/history?shipName=白洋淀001&interval=2
    

    成功返回数据

    访问其他接口,无需再验证,成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值