SpringbootSecurity

SpringbootSecurity/시큐리티 로그인

25G 2021. 8. 25. 17:44

SpringbootSecurity에 포스팅은 처음부터 끝까지 연결되니 처음부터 봐주세요

저번 포스팅 때 시큐리티 회원가입을 해봤으니 이제 로그인을 진행해 본다.

주석을 꼭 참고하고 위와 같이 security설정을 해준다.

위와 같이 action속성을 지정해주면 이제 login처리는 security가 낚아채서 대신 처리를 해주는 것이다. method는 Post로 설정.

이때 시큐리티가 로그인처리를해주기위해 해줘야 할 몇 가지 처리들이 있다.

위경로에 패키지랑 클래스추가

주석을 꼭 참고해서 공부할것

설명을 좀 더 덫붙힌다면.

user가 로그인을 했을 때 저장하는 session정보를 Security Session에 저장을 해야 한다는 말인데 그러기 위해선

Security Session => Authentication객체 => UserDetails(PrincipalDetails는 상속받아서 같은 타입이 됨)의 역순으로 단계적으로 저장을 해서 최종적으로 Security Session에 저장이 된다라는 말이다.

 

상속받은 인터페이스의 함수들을 오버 라이딩해서 재설정해준다.

주석을 꼭 참고할 것.

위 클래스를 메모리에 띄우지 않은 이유는 나중에 강제로 new 해서 메모리에 띄울 거다.

이제 하나 더 클래스를 만들어 준다.

위 설명을 좀 더 쉽게 풀자면 /login이 요청되면 스프링 시큐리티가 대신 낚아채서 로그인 작업을 해준다.

위 인터페이스 함수를 오버 라이딩을 하게 되면 아래와 같은 하나의 함수가 나온다.

주석이 핵심 내용이다.

위 함수에 매개변수 또한 String username이라고 돼있는데 만약에 form으로 데이터를 보내줄 때 name속성을 username이라고 하지 않고 user라던지 하는 name속성 값을 주게 되면 매개 변숫값이 일치가 하지 않아서 UserDetails함수에서 값을 받을 수 없게 된다 중요하니 꼭 참고!!

 

위에서 Security Session => Authentication객체 => UserDetails(PrincipalDetails는 상속받아서 같은 타입이 됨)의 역순으로 단계적으로 저장을 해서 최종적으로 Security Session에 저장이 된다라는 말이다.라는 말을 했는데 위 주석도 결국 똑같은 말이지만 원리를 알려주는 주석이다.

유저를 찾는 findByUsername함수는 쿼리 메서드라는 문법이다.

쿼리메소드
로그인이 잘된다.

인덱스 페이지로 가는 이유는 defailtURL를 인덱스 페이지로 가도록 설정해주기 때문이다.

 

이때 시큐리티의 엄청 좋은 기능이 있는데

만약에 로그인이 되지 않은 상태에서 /user로 갔다가 시큐리티가 /loginForm페이지로 이동시켰는데

이때! 만약에 로그인을 하면 설정한 인덱스 페이지가 아니라 /user로 보내주는 것이다.

그리고 권한이 없는 manager나 admin으로는 403이 뜨면서 들어갈 수 없는 것을 확인해 볼 수 있다.

 

https://github.com/fj2008/SpringbootSecurity