dubbo项目实现:单点登录系统

本文介绍了使用Java和Dubbo构建单点登录系统的过程,包括为何需要单点登录、BCrypt密码加密的原理与实现、Session+Cookie的传统认证方案以及基于Cookie+Redis的登录认证方案。同时,文章还讨论了跨域请求的解决方案,如JSONP,并阐述了登录后返回原界面的实现策略。
摘要由CSDN通过智能技术生成

掌握独立开发功能模块的流程

  1. 分析需求
  2. 设计实现方案
  3. 编码实现
  4. 测试调试
  5. 反馈优化

1,为什么需要单点登录系统?

2,单点系统关注哪些方面?

  1. 提供登录页面
  2. 提供账号信息认证
  3. 验证账号的登录状态
  4. 注销账号

3,BCrypt密码安全加密

3.1 特点简介

Spring Security提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强哈希方法来加密密码。

BCrypt可以做到相同的密码,但每次加密的结果不一样,这样即使被“脱库”,也可以保证不会被一次性破解所有相同密码的用户信息

3.2 添加依赖

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

3.3 添加配置类

当我们添加SpringSecurity依赖后,所有的地址都会被SpringSecurity控制,但此处我们只需要用到加密功能,所以添加一个配置类,开放所有的地址都可以匿名访问。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
   
    @Override
    protected void configure(HttpSecurity http) throws Exception {
   
         http
         .authorizeRequests()
        .antMatchers("/**").permitAll()
        .anyRequest().authenticated()
        .and().csrf().disable();
    }
}

3.4 声明加密工具类

@Bean
public BCryptPasswordEncoder bcryptPasswordEncoder(){
   
     return new BCryptPasswordEncoder();
}

3.5 通过该工具类实现加密和验证密码正伪

//此方法用来进行加密
String encode = encoder.encode(tUser.getPasswd());

//此方法用来判断密码是否一致,参数一:输入的密码,参数二:数据库保存的密码
 if(encoder.matches(user.getPasswd(),tUser.getPasswd())){
   
      return tUser;
 }          

4,单点登录实现方案一

灵感来自传统的用户认证过程,基于Session+Cookie的机制演变过来。
此种方案,称为有状态性的方案,服务端需要保存凭证信息。

关键点:

  • 保存凭证
//登录成功,保存凭证 redis+cookie来实现
        //cookie:  key:user_cookie    value:UUID
        //redis:  key:user:token:UUID  value:对象

        //生成uuid
        String uuid = UUID.randomUUID().toString();
        //保存至cookie
        Cookie cookie = new Cookie(UserUtil.USER_COOKIE,uuid);
        //考虑安全性,表示cookie只能通过后端来获取,不能通过前端的脚本来获取
        cookie.setPath("/");
        cookie.setHttpOnly(true);
        response.addCookie(cookie);

        //存对象到redis
        //拼接完整的key
        StringBuilder builder= new <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值