본문 바로가기

전체 글232

spring security를 알아보자 - 7 ㅇ PasswordEncoder의 역할을 알아보자. 데이터베이스에는 비밀번호가 절때로 그냥 문자열로 저장되면 로그에서나, 다른부분에서 유출이 발생할 수 있어서, 절대 그렇게 저장해서는 안된다. DB에 항상 저장할땐 비밀번호를 인코딩해서 저장을 해야한다. Spring security 프레임워크 내에 어디서 비밀번호 검증이 일어날까? DaoAuthenticationProvider에서 실질적인 검증이 일어난다. authenticate() 에서 유저정보를 불러오고, PreAuthenticationCheck에서 만료되었는지 검증하고, additionalAuthenticationChecks() 에서 인증객체를 받고 거기에 입력받은 비밀번호정보를 PsswordEncoder.matches() 로 인코딩한 입력받은 비밀.. 2024. 3. 26.
spring security를 알아보자 - 6 Jpa를 사용해보자. Customer 엔티티와, CustomerRepository를 만들어주자. CustomerRepository는 CrudRepository를 extends한다. @Repository public interface CustomerRepository extends CrudRepository { } 에서 Customer는 어느테이블에 속하는 리포지토리인지, Long은 PrimaryKey의 타입을 적어준것이다. 그리고 레포지토리나 엔티티가 메인 애플리케이션 밖에 존재한다면 @EnableJpaRepositories, @EntityScan를 붙혀준다. 하지만 나는 안에 존재하기때문에 알아서 적용된다. 이제 loadUserByUsername을 사용하기위해 UserDetailsService를 imp.. 2024. 3. 25.
방문길이 처음가본길만을 구하는 문제이므로, 중복되는 길은 선택하지 않는다는의미. 처음엔 최종적으로 위치해있는 지점의 x축 절댓값 + y축 절댓값을 더하면된다생각했는데 그건 아니었다. 어떻게 접근해야할까? 이동할때마다의 좌표를 저장하고 cnt를 ++ 해주면서, 저장된 좌표로 다시 이동하게되면 cnt를 해주지않고 넘어가는 방식으로 해야하나 싶다. 그런데 문제는 파라미터로 주어지는 dirs의 길이는 500이하다. 최대 500번의 좌표를 저장하게되면 런타임에러가 발생하지 않을까 싶다. 일단 한번 이렇게 해보겠다. 수도코드를 짜보자. // 먼저 (x,y)좌표를 나타낼 길이가 2인 int형 배열 xy를 초기화해주자. int[] xy = new int[2]; // 그다음 xy의 history를 담을 리스트로 ArrayList.. 2024. 3. 22.
spring security를 알아보자 - 5 UserDetailsManager를 구현하는클래스를 알아보자. ㅇ InMemoryUserDetailsManager public void createUser(UserDetails user) { Assert.isTrue(!this.userExists(user.getUsername()), "user should not exist"); this.users.put(user.getUsername().toLowerCase(), new MutableUser(user)); } public void deleteUser(String username) { this.users.remove(username.toLowerCase()); } public void updateUser(UserDetails user) { Assert.i.. 2024. 3. 21.