[Spring] 06. Spring security 적용하기 (2)
개발공부/Spring 2015. 12. 6. 15:46음... 어... 이어쓴다그러고 한달이 지났네요..ㅠ 게을러서 죄송합니다ㅠ
주말되면 그렇게 쉬고싶더라구요ㅠㅠ
변명좀 하자면 운동도 좀 하고 그러면 그냥 쉬고싶어서..ㅠㅠ
바로 시작하겠습니다ㅠ
이전내용 : http://comtk.tistory.com/20
2. 시큐리티 파일 생성
잠시 이전에 올려두었던 'security-context.xml'을 보고가겠습니다.
오늘은 여기서 ●이 있는 파일들만 설명드리겠습니다.
이전글에 전체 파일들에 ●들이 막 찍혀있는건 그파일들을 손댔다는뜻인데, http://comtk.tistory.com/10 이 글에 있는 내용의 작업들을 한겁니다. DB가서 데이터 가져오는 작업을 한것이죠. 어떤작업을 한것인지는 설명드리겠습니다.
2-1. CustomizeUserDetailsService
위 이미지에서 맨 아래부분을 확대해보겠습니다.
위 이미지를 보시면 'authentication-provider' 를 보시면 'customizeUserDetailsService' 라고 되어있습니다.
권한에 대한 처리를 'customizeUserDetailsService'에서 제공받는다는 의미로 생각됩니다.
첫번째 ●을 보시면 'loginAction 구현' 이라는 주석이 달려있습니다.
저 클래스에서 권한과 로그인에 대한 부분을 같이 처리하고있습니다.
해당 클래스의 내용을 확인해보겠습니다.
위에서부터 차근차근 설명해보겠습니다.
이 클래스는 'UserDetailsService'를 상속받아서 만들어야 합니다.
네 그래야만 해요. 그래야지 저대로 쓸수있어요. 따로 설정을 해주지않으면 스프링은 저 클래스를 사용해서 권한 및 로그인에 대한 처리를 한다고 알고있습니다. 그래서 클래스를 상속받아서 메소드를 입맞에 맛게 오버라이딩 한 후에 사용해야 합니다.
그 다음으로 변수들을 보겠습니다.
이 변수들은 사실 꼭 필요한것은 아니지만.. 잠시후에 계정의 권한을 위해서 만들어둔 변수들입니다.
위에서부터 하나씩 설명하지면 '사용 가능한지', '계정이 만료되지 않았는지', '자격이 만료되지 않았는지', '계정이 잠기지 않았는지' 체크하는 변수들입니다.
그 다음줄은 사용자가 입력한 계정명으로 해당 계정을 찾아서 가져옵니다.
그 아랫줄에서는 그 계정에 대한 상태를 가져와서 if문에서 하나하나 비교해서 상태에 맞게 계정정보를 설정해줍니다.
다음줄로 넘어가겠습니다.
저는 권한을 DB에 저장하여 사용하고있습니다.
DB에서 권한목록을 가져와서 권한을 추가해줍니다. 위 이미지에서 가지고있는 권한중에 'Anonymous'가 있을경우, 권한목록을 따로 생성하지않는것을 볼 수 있습니다. 이는 위 내용은 손님이 아닌 그 이상의 권한을 가진 사람들에 대한 권한처리를 위해 작성된 것임을 알려드립니다. 각 프로젝트의 특성에 맞게 권한을 부여해주시는것이 바람직합니다.
이제 설정한 권한 및 계정상태를 member에 담아서 리턴해줍니다.
이 과정이 끝나면 로그인이 되거나, 로그인에 실패하거나 둘중 하나의 상황을 맞이하게 됩니다.
먼저 성공했을때의 상황을 보겠습니다.
2-2. CustomizeAuthenticationSuccessHandler
맨 위 이미지에서 두번째 ●에 해당하는 클래스입니다.
로그인이 성공했을 경우를 보여줍니다.
이 클래스 역시 다른 클래스를 상속받아서 사용합니다.
저는 로그에 '성공' 이라는 텍스트를 찍고 메인페이지로 이동하도록 작업했습니다.
2-3. CustomizeAuthenticationFailureHandler
맨 위 이미지에서 세번째 ●에 해당하는 클래스입니다.
로그인이 살패했을 경우를 보여줍니다.
이 클래스 역시 다른 클래스를 상속받아서 사용합니다.
저는 로그에 '실패' 라는 텍스트를 찍고, 어떤이유로 로그인에 실패했는지 로그를 남깁니다.
이후 페이지는 다시 로그인페이지로 이동합니다.
2-4. encoder
이부분은 따로 파일을 만들지 않고 기본 스프링 인코더를 사용했습니다.
그러나, 따로 암호화 모듈을 사용하여 사용하셔도 됩니다.
'class'부분을 수정하여 사용하시면 됩니다.
3. 부가적인 설정
자 이제, 로그인 및 계정에 대한 권한설정 부분을 하였습니다.
그럼 이제 권한을 사용하여야 하는데... 어떻게 사용할까요...
손님이 접근가능한 부분과, 관리자가 접근가능한부분등 각 권한에 따라 접근 및 행동에 제약이 있어야지, 그렇지않으면 권한이 의미가 없습니다.
●을 보시면 '@secured("ROLE_USER")'가 보이실겁니다.
이 한줄로 사용자의 접근을 통제할 수 있습니다.
위 이미지처럼 메소드 위에 써놓으면 해당 메소드는 저 권한이 있는 사용자만 접근이 가능하게 됩니다.
그러나, 메서드별로 해놓으경우 각 메소드마다 다 써줘야하는 번거로움이 있습니다.
class 위에 적어놓으시면 클래스 내의 모든 메소드는 선언되어있는 권한이 있는 사용자만 접근 가능합니다.
그렇기때문에 권한 및 기능별로 클래스를 잘 나누어 사용하는것이 좋습니다.
그럼 한줄만 추가 및 수정하는것으로 사용자의 접근을 통제 가능하게 됩니다.
이외에도 여러가지 설정이 더 있겠지만, 이정도면 기본적인 로그인 및 권한, 접근제어등에 대해서 사용이 가능하다고 생각됩니다. 혹시 내용중에 틀린부분이 있다면 지적해주시면 감사하겠습니다. 그래야 저도 더 공부가 되니까요!!
다음번엔 무엇을 해볼까요.. 뭔가 더 있을텐데... 아참 스프링 4.0이 나왔다는데 그것도 날잡아서 시작해봐야겠어요!!
다른 카테고리도 글을 써야하는데 참... 할게많네요ㅠ 어 어떻게 마무리를 하지.. 음.. 다음에 또 봐요!!
'개발공부 > Spring' 카테고리의 다른 글
[Spring] 01. 프로젝트 생성 (0) | 2019.08.14 |
---|---|
[Spring] 06. Spring security 적용하기 (3) (0) | 2015.12.25 |
[Spring] 06. Spring security 적용하기 (1) (0) | 2015.11.14 |
[Spring] 05. Spring + myBatis 설정 (0) | 2015.09.20 |
[Spring] err-02. spring 한글 깨짐 (0) | 2015.09.13 |