java服务器开发教程 再谈websocket论架构设计(3)

电脑杂谈  发布时间:2018-02-21 00:52:48  来源:网络整理

当然,除此之外,spring websocket还提供了权限整合的功能,还有自带天生与spring家族等相关框架进行无缝整合。

应用场景 应用背景

2016年,在公司与同事一起讨论和开发了公司内部的客服系统,由于前端技能的不足,很多通讯方面的问题,无法亲自调试前端来解决问题。

因为公司技术架构体系以前后端分离为主,故前端无法协助后端调试,后端无法协助前端调试

在加上websocket为公司刚启用的协议,了解的人不多,导致前后端调试问题重重。

一年后的今天,我打算将前端重温,自己来调试一下前后端,来发掘一下之前联调的问题.

当然,前端,我只是考虑stomp.js和sockt.js的使用。

代码阶段设计 角色

客服

客户

登录用户状态

上线

下线

分配策略

用户登陆后,应该根据用户角色进行分配

关系保存策略

应该提供关系型保存策略: 考虑内存式策略(可用于测试),redis式策略

备注:优先应该考虑实现Inmemory策略,用于测试,让关系保存策略与存储平台无关

通讯层设计

归类topic的广播设计(通讯方式:1-n)

归类queue的单点设计(通讯方式:1-1)

代码实现 角色

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.User;
import java.util.Collection;
public enum Role {
  CUSTOMER_SERVICE,
  CUSTOMER;


  public static boolean isCustomer(User user) {
      Collection<GrantedAuthority> authorities = user.getAuthorities();
      SimpleGrantedAuthority customerGrantedAuthority = new SimpleGrantedAuthority("ROLE_" + Role.CUSTOMER.name());
      return authorities.contains(customerGrantedAuthority);
  }

  public static boolean isCustomerService(User user) {
      Collection<GrantedAuthority> authorities = user.getAuthorities();
      SimpleGrantedAuthority customerServiceGrantedAuthority = new SimpleGrantedAuthority("ROLE_" + Role.CUSTOMER_SERVICE.name());
      return authorities.contains(customerServiceGrantedAuthority);
  }
}

代码中User对象,为安全对象,即 spring中org.springframework.security.core.userdetails.User,为UserDetails的实现类。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-86444-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...