본문 바로가기

스프링시큐리티11

11. spring security 비밀번호 salt 암호화 하기 앞에 포스팅에서 sha256을 이용한 비밀번호 암호화에 대해 알아 봤다. 다른 암호화도 대부분 마찬가지지만, 비밀 번호를 암호화 했다고 해도 DB에 저장 됐을때 같은 암호면 암호화된 형태(hash값이)가 같다. 그로 인해 하나의 암호화된 값을 알아 내면 같은 암호를 쉽게 찾을수 있다. 이를 방지하기 위한 방법이 salt암호화 방식이다. 별다른건 아니고 사용자가 입력한 비밀번호에 사용자마다 중복되지 않는 특정 문자를 추가하여 암호화 하는 방식이다. 예를 들면 회원 가입시 중복되지 않는 아이디를 (아이디 + 비밀번호) 또는 (비밀번호 + 아이디) 형태로 붙이고 암호화를 하면된다. spring security에서 지원하는 간단한 방식을 통해 username을 사용한 salt 방식을 알아보겠다. 1.securi.. 2015. 9. 14.
10. spring security 권한 없는 사용자 접근시 처리 방법 지금 까지는 권한이 없는 사용자가 접근을 하게 되면 따로 설정을 하지않아 아래와 같은페이지로 이동을 했다. 아마 저런 페이지로 놔둘곳은 없을 것이다. security에서 처리 방법을 보면 url을 지정하여 접근 권한이 없으면 해당 url로 이동시키는 방법이 있고, 아니면 AccessDeniedHandler 인터페이스를 구현하여 지정하는 방법이 있다. url로 지정하는 방법을 알아보면 1.에 access-denied-page="" 속성 추가 2.해당 주소로 접속 할 Controller추가 @RequestMapping("/user/denied") public String denied(Model model, Authentication auth, HttpServletRequest req){ AccessDenie.. 2015. 9. 14.
09. spring security @Secured 어노테이션을 사용하여 접근 권한 부여 접근 권한을 부여 할 때 security-context.xml에 직접선언을 할 수 있지만, @Secured어노테이션을 사용하면 좀 더 편하고 직관적인 권한 부여가 가능하다. @Secured 어노테이션은 권한이 필요한 부분에 선언 할 수 있는데 Class나 Method 단위까지 지정을 할 수 있다. 예를 들면 ROLE_ADMIN만 접근시킬 메서드가 있다면 해당 메서드위에 @Secured 어노테이션을 선언해주기만 하면 된다. 1.pom.xml에 cglib.jar를 추가해야한다(라이브러리의 정확한 용도는 모르겠다.)​ cglib cglib 2.2 2.context:component-scan 이있는 context.xml에서 를 추가한다. 이 부분이 참 애매 했는데, 언뜻보면 시큐리티 관련 어노테이션이기 때문에 .. 2015. 9. 11.
08. spring security 인증된 사용자 Spring MVC에서 확인 하기 & security Tag 이제 인증된 사용자를 실제 Spring MVC에서 어떻게 사용하는지 알아보겠다. spring security를 사용하지 않은 프로젝트 들이라면 session에 사용자 정보를 담아두고 사용 할 텐데 (물론 인증 성공 프로세스에서 사용자 정보를 session에 따로 담아 관리해도 상관은 없지만) security를 사용하면 사용자 정보가 인증후 어딘가 보관은 되어있을텐데 어딘지 찾기가 난감하다. 사용자 요청이 들어오는 Controller에서 사용법을 보면 요청을 받은 메서드의 파라메터로 Authentication 를 지정하면 된다. ex) /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = ".. 2015. 9. 10.
07. spring security 사용자 정보 확장 & mybatis를 이용한 인증 처리& 로그아웃처리 이번에는 security의 기본 User클레스를 확장하여 실제로 필요한 회원 정보를 추가하고 security-context.xml에있던 사용자 인증 쿼리를 mybatis로 이동시켜 사용하겠다. 그리고 처음에 포스팅할때 같이 해야 했던 logout도 적용시키겠다. 1.logout은 별거 없다. security-context.xml의 http에 를 추가한다. logout-url : 로그아웃이 요청될 url (이 주소로 요청이 들어오면 security에서 알아서 logout시켜준다)​ logout-success-url : 로그아웃이 성공 후 이동할 주소 ​delete-cookies : 쿠키 삭제 여부 ​invalidate-session : 세션 제거 여부 ​2.이제 security에서 제공해주는 User클레스.. 2015. 9. 10.
06. spring security 중복 로그인 방지 or 중복세션 제한하기 spring security에서는 (내부 정책에 따라 다르겠지만)중복로그인 방지를 위한 방안을 마련해 두었다. 1.web.xml에 listener등록 (이 부분은 지정을 해야한다는 예제가 많았는데 테스트 해보니 3.1.0.RELEASE 에서는 등록 하지 않아도 상관이 없었다 자세한 내막은 나도 모름) org.springframework.security.web.session.HttpSessionEventPublisher 2.security-context.xml에 세션 제한 지정 에 invalid-session-url​ : 세션이 끊겼을때 이동 할 페이지 max-sessions="1" : 최대 허용 가능 세션 수​ expired-url="/user/loginPage" : 중복 로그인이 일어났을 경우 이동 할.. 2015. 9. 9.