• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    WebService的用户控制方式与加密算法分类的整理

    WebService的用户控制方式与加密算法分类的整理

     我们的系统中,所有的WebSerivce都由权限控制的。记录在此备用!

    一、示例ws

    @Service 
    @Transactional 
    @WebService(endpointInterface = "com.mycompany.sms.ws.SmsService", targetNamespace = "http://www.mycompany.cn/sms", serviceName = "ServiceInstance") 
    public class SmsServiceImpl implements SmsService { 
     
      private SecretKey secretKey; 
     
      @Autowired 
      private SessionManager sessionManager; 
     
      // 将十六进制数字字符串转成字节流【保持16位】 
      private String hexStr = "3243456789123459"; 
     
      public SmsServiceImpl() { 
        byte[] hex = SecurityHelper.hexStrToByte(hexStr); 
        secretKey = new SecretKeySpec(hex, "DES"); 
      } 
     
      @Override 
      public String login(String account, String password) { 
        User user = sessionManager.login(secretKey, account, password); 
        return user.getSessionId(); 
      } 
     
      @Override 
      public void logoff(String sessionId) { 
        sessionManager.logoff(sessionId); 
      } 
     
      @Override 
      public boolean sendMessage(String sessionId, String msgNumber, 
          String msgContent) { 
        sessionManager.getUser(secretKey, sessionId); 
        do something...; 
        return true; 
      } 
    } 
    
    

    备注:

    1.使用时给客户端提供一个用户与密码。用户与密码之间与ws中的key有关。
    2.先登录,验证用户与密码,返回sessionId。
    3.使用其它function,都要传入sessionId,判断session中有没有这个ID,以及secretKey是否相等,貌似这步没啥用。

    二、session管理

    @Component 
    public class SessionManager { 
     
      @Autowired 
      private CacheProvider cacheProvider; 
     
      public User login(SecretKey secretKey, String account, String password) { 
        SecurityHelper securityHelper = new SecurityHelper(secretKey); 
        String password2; 
        try { 
          password2 = SecurityHelper.byteToHexStr(securityHelper 
              .encode(account.getBytes("UTF-8"))); 
        } catch (UnsupportedEncodingException e) { 
          throw new LoginException(e); 
        } 
        if (password2.equals(password)) { 
          User user = new User(account); 
          user.setSecretKey(secretKey.getEncoded()); 
          addSession(user); 
          return user; 
        } else { 
          throw new LoginException("登录失败"); 
        } 
      } 
     
      public void logoff(String sessionId) { 
        removeSession(sessionId); 
      } 
     
      private void addSession(User user) { 
        cacheProvider.put("webservice-session-" + user.getSessionId(), user); 
      } 
     
      private void removeSession(String sessionId) { 
        cacheProvider.remove("webservice-session-" + sessionId); 
      } 
     
      public User getUser(SecretKey secretKey, String sessionId) { 
        User user = (User) cacheProvider.get("webservice-session-" + sessionId); 
        if (user == null) { 
          throw new WsException("用户未登录或登录超时"); 
        } else if (!bytesEquals(secretKey.getEncoded(), user.getSecretKey())) { 
          throw new WsException("没有调用本接口的权限"); 
        } else { 
          return user; 
        } 
      } 
     
      private boolean bytesEquals(byte[] bytes1, byte[] bytes2) { 
        for (int i = 0; i  bytes1.length; i++) { 
          if (bytes1[i] != bytes2[i]) { 
            return false; 
          } 
        } 
        return true; 
      } 
     
    } 
    
    

    备注:

    cacheProvider是一个通用的缓存工具接口。

    三、加密算法

    上面正好看到了des,这里简单汇总一下加密算法:

    1.HASH

    MD5、SHA1、SHA256之类的都是单向HASH算法,不能从结果导出原内容,原内容有任何一点变化,HASH值都会变化。特点是不可逆。

    2.对称加密

    DES、3DES、AES这些,特点是加密与解密用一样的密钥。DES老了不安全,AES最新。

    3.非对称加密

    RSA、ECC(椭圆曲线)这些,特点是不同的密钥,一个公,一个私。一个加的密只能用另一个解密。公加密保证只能私有人看到,私加密保证内容是这个人发的。

    4.常用的https,可以先用非对称加密传递对称加密的密钥,正常的内容用对称加密来传。

    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • 详解Spring boot+CXF开发WebService Demo
    • java实现简单的webservice方式
    • java WSDL接口webService实现方式
    • 详解java开发webservice的几种方式
    上一篇:详解JSP中使用过滤器进行内容编码的解决办法
    下一篇:JSP Session超时设置的实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    WebService的用户控制方式与加密算法分类的整理 WebService,的,用户,控制,方式,