앞에 포스팅에서 sha256을 이용한 비밀번호 암호화에 대해 알아 봤다. 다른 암호화도 대부분 마찬가지지만, 비밀 번호를 암호화 했다고 해도 DB에 저장 됐을때 같은 암호면 암호화된 형태(hash값이)가 같다. 그로 인해 하나의 암호화된 값을 알아 내면 같은 암호를 쉽게 찾을수 있다. 이를 방지하기 위한 방법이 salt암호화 방식이다. 별다른건 아니고 사용자가 입력한 비밀번호에 사용자마다 중복되지 않는 특정 문자를 추가하여 암호화 하는 방식이다. 예를 들면 회원 가입시 중복되지 않는 아이디를 (아이디 + 비밀번호) 또는 (비밀번호 + 아이디) 형태로 붙이고 암호화를 하면된다. spring security에서 지원하는 간단한 방식을 통해 username을 사용한 salt 방식을 알아보겠다. 1.securi..
지금 까지는 권한이 없는 사용자가 접근을 하게 되면 따로 설정을 하지않아 아래와 같은페이지로 이동을 했다. 아마 저런 페이지로 놔둘곳은 없을 것이다. security에서 처리 방법을 보면 url을 지정하여 접근 권한이 없으면 해당 url로 이동시키는 방법이 있고, 아니면 AccessDeniedHandler 인터페이스를 구현하여 지정하는 방법이 있다. url로 지정하는 방법을 알아보면 1.에 access-denied-page="" 속성 추가 2.해당 주소로 접속 할 Controller추가 @RequestMapping("/user/denied") public String denied(Model model, Authentication auth, HttpServletRequest req){ AccessDenie..
접근 권한을 부여 할 때 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에서 를 추가한다. 이 부분이 참 애매 했는데, 언뜻보면 시큐리티 관련 어노테이션이기 때문에 ..
이제 인증된 사용자를 실제 Spring MVC에서 어떻게 사용하는지 알아보겠다. spring security를 사용하지 않은 프로젝트 들이라면 session에 사용자 정보를 담아두고 사용 할 텐데 (물론 인증 성공 프로세스에서 사용자 정보를 session에 따로 담아 관리해도 상관은 없지만) security를 사용하면 사용자 정보가 인증후 어딘가 보관은 되어있을텐데 어딘지 찾기가 난감하다. 사용자 요청이 들어오는 Controller에서 사용법을 보면 요청을 받은 메서드의 파라메터로 Authentication 를 지정하면 된다. ex) /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "..
이번에는 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클레스..
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" : 중복 로그인이 일어났을 경우 이동 할..
spring security 에서는 기본적으로 아래와 같은 암호화 모듈을 제공하고 있다. BaseDigestPasswordEncoder BasePasswordEncoder LdapShaPasswordEncoder Md4PasswordEncoder Md5PasswordEncoder MessageDigestPasswordEncoder PlaintextPasswordEncoder ShaPasswordEncoder 참조 문서 : http://docs.spring.io/autorepo/docs/spring-security/3.1.6.RELEASE/apidocs/org/springframework/security/authentication/encoding/package-summary.html 이중에서 ShaPass..
이번 포스팅은 MY-SQL을 이용해 간단히 로그인 인증 & 권한 처리 하는법을 알아 보겠다.우선 pom.xml에 mysql관련 라이브러리를 등록한다. mysql mysql-connector-java 5.1.22 jar compile commons-collections commons-collections 3.2.1 commons-io commons-io 2.4 1.mysql에 테이블을 만든다. 예제들을 보면 테이블을 사용자 테이블과 권한테이블 두개로 나눠서 하지만 그냥 간단한 테스트기 때문에 테이블 하나로 사용하겠다. CREATE TABLE `user` ( `EMAIL` varchar(255) NOT NULL, `PASSWD` varchar(255) NOT NULL, `ENABLED` int(1) NOT ..
이전 포스팅에서 사용자가 정의한 로그인 페이지로 로그인 하는 방법을 익혔으니 이번에는spring security에서 인증절차를 거친 후 커스텀 프로세서를 통해 인증된 사용자를 관리하는 방법과 spring security에서 css와js파일등 인증이 필요없는 리소스 파일들을 security필터를 거치지 않게하는 방법도 알아보겠다. 1.우선 STS에서 생성한 Spring MVC프로젝트의 폴더구조를 보면 아래와 같다.webapp - resources 폴더가 웹의 정적리소스 파일들 (이미지,css,js등)을 포함시키는 폴더이다.그래서 프로젝트 생성시 만들어진 spring 기본설정 appServlet폴더의 servlet-context.xml을 보면 라고 resources로 들어오는 요청은 스프링에서 관리하지 않겠..
지난 포스팅에서는 로그인화면과 처리를 spring security에서 설정한 기본 페이지로 작업을 했다.하지만 실제로 저 기본 페이지로 사용하려는 곳은 거의 없을 것이다.이번엔 사용자가 직접 작성한 로그인폼을 이용하여 인증처리를 해보도록 하겠다. 1.로그인 페이지 작성 (WEB-INF/views/user/loginPage.jsp) 2.로그인 페이지 이동을 위한 user패키지 및 컨트롤러 생성 package com.min.study.user.web; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.an..
- Total
- Today
- Yesterday
- cronexpression
- fullcalendar
- sprign security
- 중복 호출
- java
- replaceWith
- git log
- 2장요약
- getaddrinfo ENOTFOUND localhost
- 인테리어 시뮬레이터
- indexeddb
- 중복 실행
- intranet 설치방법
- array
- errordocument
- 자료형
- git reflog
- Git
- remember-me
- yyyy-MM-dd
- Spring
- 스프링시큐리티
- 몽고디비
- mongoDB
- jquery
- GitHub
- springsecurity
- javascript
- Security
- xcrun