WebService 의 사용자 제어 방식 과 암호 화 알고리즘 분류의 정리

WebService 의 사용자 제어 방식 과 암호 화 알고리즘 분류의 정리
 우리 시스템 에 서 는 모든 WebSerivce 를 권한 으로 제어 합 니 다.여기에 기록 하여 준비 하 세 요!
예시

@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 의 키 와 관련 이 있 습 니 다.
2.먼저 로그 인하 여 사용자 와 비밀 번 호 를 검증 하고 sessionId 로 돌아 갑 니 다.
3.다른 function 을 사용 하면 session Id 에 들 어가 session 에 이 ID 가 있 는 지,그리고 secretKey 가 같은 지 판단 해 야 합 니 다.이 단 계 는 소 용이 없 을 것 같 습 니 다.
세 션 관리

@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 는 일반적인 캐 시 도구 인터페이스 입 니 다.
3.암호 화 알고리즘
위 에서 마침 des 를 보 았 습 니 다.여기 서 암호 화 알고리즘 을 간단하게 모 았 습 니 다.
1.HASH
MD5,SHA 1,SHA 256 같은 것 은 모두 단 방향 HASH 알고리즘 으로 결과 에서 원래 내용 을 내 보 낼 수 없고 원래 내용 에 약간의 변화 가 있 으 면 HASH 값 이 변 합 니 다.거 스 를 수 없 는 것 이 특징 이다.
2.대칭 암호 화
DES,3DES,AES 등 암호 화 와 복호화 용 같은 키 가 특징 입 니 다.DES 가 늙 으 면 안전 하지 않 습 니 다.AES 가 최신 입 니 다.
3.비대 칭 암호 화
RSA,ECC(타원 곡선)등 은 서로 다른 키,하나의 공,하나의 개인 이 특징 이다.하나의 비밀 은 다른 비밀 로 만 복호화 할 수 있다.공공 암호 화 보증 은 개인 만 볼 수 있 고 개인 암호 화 보증 내용 은 이 사람 이 보 낸 것 이다.
4.자주 사용 하 는 https 는 비대 칭 암호 화로 대칭 암호 화 된 키 를 전달 하고 정상 적 인 내용 은 대칭 암호 화로 전달 할 수 있 습 니 다.
궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기