PasswordEncoder 인터페이스 이해일반적으로 시스템은 암호를 그대로 저장하지 않고 해시를 사용해 저장한다. PasswordEncoder는 암호를 인코딩하고 인증 프로세스에서 암호가 유효한지 확인한다.upgradeEncoding 메서드는 false를 반환하도록 기본 구현이 되어 있는데 이를 true 를 반환하도록 재정의하면 인코딩된 암호를 보안 향상을 위해 다시 인코딩한다. 상황에 따라 재정의해서 사용할 수 있다.encode 와 matches 메서드는 기능적으로 밀접한 관계가 있어 이 둘을 재정의하려면 기능 면에서 항상 일치해야 한다. PasswordEncoder 로 인코딩된 암호가 주어진 암호와 같은지 PasswordEncoder로 확인할 수 있어야 한다.제공된 구현 선택스프링 시큐리티에서 이미..
전체 글
먼저 요청이 들어오면 필터가 요청을 가로채고 인증 책임이 AuthenticationManager로 위임된다. 인증 논리 구현하는 AuthenticationProvider를 이용하는데 이 때 UserDetailsService에서 사용자를 찾고 PasswordEncoder 로 암호를 검증한다. 모든 인증이 끝나면 SecurityContext에 UserDetails가 저장된다.사용자 관리는 UserDetailsManager와 UserDetailsService를 사용한다. UserDetailsService 는 사용자 이름으로 사용자를 찾는 역할만 하고 UserDetailsManager 는 사용자의 삭제, 추가, 수정 작업을 수행한다.사용자는 애플리케이션 내에서 수행할 수 있는 작업을 나타내는 이용 권리의 집합을..
접근처음에는 ((A % M) + (B % M)) % M = (A+B) % M 을 사용하는 문제라고 생각했다. A + B == C일 때, ((A % M) + ((C - A) % M)) % M = C % M를 활용하면 될 것 같았는데, 수가 최대 1,000,000,000까지이므로 인덱스를 어디로 잡는지가 문제였다. 제한 시간이 초과되었고, 알고리즘을 확인해보니 유클리드 호제법이 있었다. 이전에도 몇 번 접했지만 자주 쓰지 않을 거라고 판단해서 그 때 그 때마다 찾아서 확인했었다. 자주 접하게 되어서 아예 에라토스테네스의 체처럼 기억을 해둘 필요를 느꼈다. 유클리드 호제법두 양의 정수 a, b(a > b)에 대하여 a = bq + r (0 ≤ r gcd(a, b) = gcd(b, r) 반복문 방식def euc..
접근팀원 구성 점수 아래 요소들의 합계이다.(X, Y), (Y, Z), (X, Z) 의 천간 관계 점수, 지지 관계 점수X, Y, Z의 실력 값의 합계그렇다면 결국 메모는 필요한데 배열과 dict를 고민하던 중 조합을 사용해야 하는데 N이 10^6까지 가능하므로 비트마스킹을 쓰기에는 너무 크다고 판단하여 dict를 사용하기로 했다. dict를 사용해서 2가지 조합을 미리 만들고 여기서 한 명을 더 추가하는 식으로 하려고 했었는데 이를 구현하지 못했다. 결국 시간이 꽤 흘렀고 알고리즘을 확인해보니 비둘기집 원리 문제였다. 풀이비슷한 유형을 풀어보고 싶다면 이 문제를 풀어보자. 비둘기집 원리란 비둘기 집이 N개있고, N 보다 큰 M 마리의 비둘기가 있다고 가정하자. 이 때 최소 한 마리 이상의 비둘기는 다른..