목록전체 글 (40)
helloworld
ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : cohttp://m.toy.project.file.domain.FileEntity.product -> cohttp://m.toy.project.product.domain.Product; nested exception is java.lang.IllegalStateExc..
프로젝트를 생성 할 때 jwt라이브러리를 넣어줬었다. override한 successfulAuthentication 메서드에서 가지고 있는 파라미터인 Authentication 객체를 PrincipalDetails 으로 다운캐스팅해 놓는다. String jwtToken = JWT.create() .withSubject("cos토큰")//토큰이름 .withExpiresAt(new Date(System.currentTimeMillis()+(60000*10)))//토큰만료시간 현재시간+10분 60초*10 .withClaim("id",principalDetails.getUsers().getId()) .withClaim("username",principalDetails.getUsers().getUsername()..
UsernamePasswordAuthenticationFilter 를 상속받은 JwtAuthenticationFilter 클래스에서 attemptAuthentication과 successfulAuthentication을 overried 하였다. attemptAuthentication 여기에서는 username과 password를 받아서 파싱을 한 후 UsernamePasswordAuthenticationToken 에 집어넣는다. 그 후에는 PrincipalDetailsService 의 loadUserByUsername()함수가 실행되고, 정상이면 (db에 있는 username과 password가 일치하면) authentication이 리턴된다. 그 후 authentication을 PrincipalDeta..
우선 필터에 대한 이해가 필요하다. 필터를 간단하게 public class MyFilter1 implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("필터1"); chain.doFilter(request,response); } } 이런 식으로 만든후 filterConfig이라는 파일을 생성한다 @Configuration public class FilterConfig { @Bean public FilterRegistrationBean filter1..
여태 이론적으로 공부를 맛봤고 본격 코딩작업에 들어간당. jwt를 사용하기 위해 config설정을 해줄게 조금 있었다. 우선 프로젝트를 생성 할 때 lombok,jpa,security,web,devtools,db를 넣어준다. 그 후 mavenrepository에서 jwt를 위한 dependency를 가져와 추가한다. https://mvnrepository.com/ 나는 버전이 높고 사람들이 가장 많이 사용한 버전을 가져와 추가하였다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-securi..
https://jwt.io/introduction JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io 이 사이트를 보면 JWT에 대한 설명을 확인 할 수 있다. JWT는 보안을 제공하긴 하지만 요점은 누가보냈나?에 중점을 둔 기술?이다 JWT의 구조는 header/payload/signature 라고 한다. xxxxx.yyyyy.zzzzz 라고 표현한다. 헤더에는 알고리즘은 뭐로 사용했는지, 타입이 뭔지 나타나있다. { "alg": "HS256", "typ": "JWT" } 페이로드는 어떠한 정보 부분이다. 이 정보는 클레임..
RFC문서란 무엇인가.. 대략적으로 설명을 들었다. 먼저 미국의 벨연구소란 곳에서 내부통신망을 이용하여 소통?을하고 있었다. 근데 별도의 내부통신망을 이용하던 A대학에서 '나도 너네랑 소통할게 있어' 라며 벨연구소와 소통약속을 만들었다. 그게 RFC 1번문서이다. 또 B대학에서 C대학에서... 이 대학들이 서로 소통하는것을 World Wide Web (www) 인터넷이고 소통하며 만든 약속들이 RFC 문서들이다. 즉 인터넷은 RFC문서로 만들었고 이 약속들이 http 프로토콜이다. JWT는 7519번째 RFC이다. 만약 현재 시점에서 W라는 대학교가 www에 끼고싶은데 W대학의 특별한 규칙을 넣고 싶을 때에는 모든 대학들의 동의를 얻어야만 한다. 처음 RFC가 만들어지고 있을때에는 상호간의 동의만 있다면..
RSA(암호화) Public Key : 공개 키 Private Key : 개인 키 a가 b에게 메시지를 보낼때 b의 공개키로 암호화 하여 메시지를 보낸다. b의 공개키로 암호되어있기 때문에 b의 개인키로만 풀 수 있기 때문에 중간에 누가 가로채더라도 읽을 수 없다. 공개키를 담아서 보내면 암호화 (개인키로 풀어서 봄) 개인키를 담아서 보내면 전자서명..(공개키로 풀어서 봄) (해커가 봐도 상관 없단 마인드..?) 암호화가 필요한 문서를 보낼때에 우선 상대의 공개키로 암호화를 한 후에, 자신의 개인키로 묶어서 보낸다. 그렇다면 중간에 누가 가로채서 변형 후 b에게 보내도 (해커는 A의 개인키를 모르기때문에 A와 같이 암호화 못함) 인증이 안된 문서이기 때문에 볼 필요가 없다. 즉 RSA의 방식으로 암호화를..
CIA ( Confidentiality Integrity Availability )란 Confidentiality : 기밀성 Integrity : 무결성 Aailability : 가용성 a,b,c 나라가 있다고 생각해 보자 a나라가 c 나라에 b나라가 보면 안되는 문서를 보내야한다. 하지만 중간에 c 나라에게 걸렸고 문서를 c나라가 봤다면 기밀성이 깨진 것이다. c나라가 만일 그 문서를 파기하고 변조해서 b 나라에 보낸다면 기밀성이 깨짐과 동시에 무결성이 깨진 것이다. 이 문서가 b나라에 전달된 순간 가용성까지 깨진것이다. 내가 원하는 문서에 제대로 접근할 수 있는가에 대한 내용인데 이미 변조가 되었기 때문에 ... 그냥 문서를 보내게 된다면 CIA는 깨지는 것이다. 계속 강의를 듣다보면 이런 보안이슈에..