[TIL]20250311

김민석·2025년 3월 12일
post-thumbnail

오늘 목표

  • 수업 전 7시 기상 후 운동(O)
  • 수업 내용 모르는 거 및 공부내용 정리(O)
  • 팀 실습 못한거 해보기(O)

배운내용

토큰 받아오는 코드 토큰은

package com.shop.cafe.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class OpenCrypt {
	public static void main(String[] args) {
		getSHA256("a","");
		getSHA256("b","");
		getSHA256("a","");
		getSHA256("a","salt");
	}
	 public static byte[] getSHA256(String source, String salt) {
           byte byteData[]=null;
           try{
               MessageDigest md = MessageDigest.getInstance("SHA-256"); 
               md.update(source.getBytes()); 
               md.update(salt.getBytes()); 
               byteData= md.digest();  
               System.out.println("원문: "+source+ "   SHA-256: "+
                                     byteData.length+","+byteArrayToHex(byteData));
           }catch(NoSuchAlgorithmException e){
               e.printStackTrace(); 
           }
           return byteData;
     }
	 	 
	  public static byte[] generateKey(String algorithm,int keySize) throws NoSuchAlgorithmException {
		 
	       KeyGenerator keyGenerator = KeyGenerator.getInstance(algorithm);	 
	       keyGenerator.init(keySize);
	       SecretKey key = keyGenerator.generateKey();
	       return key.getEncoded();	 
}	

 public static String aesEncrypt(String msg, byte[] key) throws Exception {
       SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        String iv = "AAAAAAAAAAAAAAAA";
        cipher.init(Cipher.ENCRYPT_MODE, 
        		       skeySpec,
        		       new IvParameterSpec(iv.getBytes()));        
        byte[] encrypted = cipher.doFinal(msg.getBytes());     
        return  byteArrayToHex(encrypted);
 }
	 
public static String aesDecrypt(String msg,byte[] key ) throws Exception {
 	        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
	        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
	        String iv = "AAAAAAAAAAAAAAAA";
	        cipher.init(Cipher.DECRYPT_MODE, 
	        		       skeySpec,
	        		       new IvParameterSpec(iv.getBytes()));  
	        byte[] encrypted = hexToByteArray(msg);
	        byte[] original = cipher.doFinal(encrypted);  
	        return new String(original); 
}
	 
	 public static byte[] hexToByteArray(String hex) {
		    if (hex == null || hex.length() == 0) {
		        return null;
		    }
		 
		    byte[] ba = new byte[hex.length() / 2];
		    for (int i = 0; i < ba.length; i++) {
		        ba[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
		    }
		    return ba;
		}
		 
		// byte[] to hex
		public static String byteArrayToHex(byte[] ba) {
		    if (ba == null || ba.length == 0) {
		        return null;
		    }
		 
		    StringBuffer sb = new StringBuffer(ba.length * 2);
		    String hexNumber;
		    for (int x = 0; x < ba.length; x++) {
		        hexNumber = "0" + Integer.toHexString(0xff & ba[x]);
		 
		        sb.append(hexNumber.substring(hexNumber.length() - 2));
		    }
		    return sb.toString();
		} 
	 
}

프로젝트 오류 시 해볼만한 것

프로젝트 우클릭 => maven=>update project
project=> clean

팀 실습

use ureca;
drop table if exists cart;
CREATE TABLE cart (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    prodcode INT,
    quantity INT DEFAULT 1,
    CONSTRAINT unique_cart UNIQUE (email, prodcode)
);

sql 쿼리문 cart

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="com.shop.cafe.dao.CartDao">
  
  <insert id="addToCart"  parameterType="Cart">
   INSERT INTO cart (email, prodcode, quantity) 
    VALUES (#{email}, #{prodcode}, 1)
    ON DUPLICATE KEY UPDATE quantity = quantity + 1;
  </insert>
  
</mapper>

addToCart 할 때 같은 email과 prodcode면 quantity+1해준다.

CartController

package com.shop.cafe.controller;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

import com.shop.cafe.dto.Cart;
import com.shop.cafe.dto.Review;
import com.shop.cafe.service.CartService;
import com.shop.cafe.service.MemberService;

@RestController
@CrossOrigin("http://localhost:5500/")
public class CartController {
	
	@Autowired
	CartService cartService;
	
	@Autowired
	MemberService memberService;
	@PostMapping("addToCart")
	public Map<String,String> addToCart(@RequestBody Cart cart,@RequestHeader String authorization) {
		Map<String, String> response = new HashMap();
		System.out.println(authorization);
		  try {
	            // 1️⃣ 로그인 확인 후 return
	            if (authorization == null || authorization.trim().equals("")) {
	                response.put("msg", "로그인을 해주세요");
	                return response; 
	            }
	            Date loginTime = memberService.getLoginTimeByToken(authorization);
	            Date currentTime = new Date(); // 현재 시간
	            // 3️⃣ 로그인 유지 시간 계산 (밀리초 → 분 변환)
	            long sessionStorageDeleteTime = (currentTime.getTime() - loginTime.getTime()) / (1000 * 60) ;
	            System.out.println("로그인 유지 시간(분): " + sessionStorageDeleteTime);
	            if (sessionStorageDeleteTime > 30) {
	            	 memberService.logout(authorization);
	            	 response.put("msg", "로그인 만료되었습니다. 다시 로그인하세요.");
	                return response;
	            }
	            
	            cartService.addToCart(cart);
	            memberService.updateLoginTime(authorization, currentTime);
	        } catch (Exception e) {
	            e.printStackTrace();
	            response.put("msg", "장바구니 추가 중 오류가 발생했습니다.");
	            return response;
	        }

	        return response;
	}
	
	
}
profile
나만의 기록장

0개의 댓글