Tagged: Spring5

Spring5 Security 기초 템플릿 – Session

이 글은 Spring5 에 Spring-Security 에 대한 기초 템플릿이다. Session 유지를 위해서 Redis 를 필요로 한다. 또, ElasticSearch 의 RestHighLevelClient 로 ElasticSearch를 연결 한다. 데이터베이스는 JNDI 설정으로 연결 된다.

다음과 같은 내용을 담았다.

  1. JDK 11
  2. Tomcat 서버 9 를 이용.
  3. spring-session.xml 을 작성해 Redis 를 세션으로 사용하도록 했다.
  4. JNDI 를 이용해 MySQL 에 연결된다.

Redis 설정한 이유는 Spring Security 에 인증을 InMemory 를 요구 한다. 이는 다음과 같은 설정 때문이다.

인증을 위한 패스워드가 {bcrypt} 로 되어 있다. 이 설정은 InMemory 세션을 요구한다. 이를 위해서 spring-session.xml 을 작성해 web.xml 에서 다음과 같이 인식을 시켜 준다.

Spring5 Security 기초 템플릿

이 문서는 Spring5 Security 기초 템플릿에 대한 것이다. Spring5 에 Spring-Security 를 이용해 기초적인 로그인을 구현 했다. Session 은 InMemory 가 아닌 WAS 서버에 세션을 저장한다. 로그인 정보는 spring-security.xml 에 정의된 것을 그대로 사용했다. 그야말로 기초적인 내용만 담았다.

이 템플릿이 동작하기 위한 조건은 다음과 같다.

  1. Java 1.8 기반.
  2. 데이터베이스가 연결되어 있어야 한다. 데이터베이스는 MySQL 이다.
  3. WAS 서버에 JNDI 를 연결된다.
  4. users 테이블이 필요한데, user.sql 파일에 내용이 있다.
  5. spring security 의 Role 기반 권한 접근 제어.
  6. context root 는 malluser 이다.

작동방식

Login 화면

권한을 체크하기 때문에 로그인 화면이 먼저 나온다. 권한 체크는 다음과 같이 Controller 에서 이루어진다.

ROLE_USER 권한을 가지고 있다면 초기화면에 접근이 가능하며 그렇지 않다면 로그인 화면으로 돌아가게 된다.

인증을 위한 정보는 다음과 같이 구현 됐다.

{noop} 은 암화화 되지 않는 text 기반의 암호을 말하는 것이며 위 설정은 외부 정보 저장소를 이용하지 않는 것이다.

로그인을 하면 다음과 같은 화면이 나온다.

로그인 화면

LOGOUT 버튼은 다음과 JSP 에서 Security tags 를 이용해 구현 했다.

Eclipse 에서 제작되었다.

Spring5 requirements

Spring5 를위한 필요사항들을 정리.

  1. java 8. 원래 Spring5 는 Java 9를 기반으로 하려고 했지만 변경됐다. 이로 인해서 Reactive Programming을 하기 위해서는 의존성 라이브러리를 필요로 한다. 현재Java 9 은 지원이 중단된 상태다. Java 10 을 사용해도 된다.
  2. Java EE 8 호환. Servlet 4.0, Bean Validation 2.0 등을 지원한다.
  3. HTTP/2 지원한다.
  4. Jackson 2.9, Protobuf 3.0 지원.