728x90
반응형

 

Spring이나 Spring Boot를 사용한다면 Lombok을 들어보셨을 거라고 생각합니다.

 

java를 사용해 Entity를 작성할때 getter, setter 를 추가해줘야 하지만 코드가 길어지고 반복작업이 생길때가 많습니다.

 

이러한 작업을 자동으로 처리해주는게 Lombok 입니다.

 

이번글에서는 Windows OS에서 Lombok을 설치해 보도록 하겠습니다.

 

 

 

 

Lombok Download

아래의 URI로 이동하여 Lombok.jar 파일을 다운로드 합니다.

https://projectlombok.org/download

 

Download

 

projectlombok.org

 

 

 

 

lombok.jar 실행합니다.

더블클릭으로 실행이 안된다면 cmd.exe 파일을 실행해서 진행해야 합니다.

 

window + R  키보드를 누른뒤 cmd 를 실행합니다.

 

파일명에 맞게 이름을 넣어 명령어를 실행합니다.

java -jar lombok-1.18.4.jar

 

 

 

 

Specify location... 버튼을 클릭해 STS.exe or Eclipse.exe를 선택후 Install/Update를 클릭하여 진행합니다.

 

 

 

아래와 같은 설치가 성공이 되었다면 Quit Installer 버튼을 클릭해 종료합니다.

 

 

STS.ini or Eclipse.ini 에 옵션을 추가한다.

아래와같이 2줄을 추가하고 STS나 Eclipse 를 재시작 해주시면 됩니다.

-vmargs
-javaagent:lombok.jar

 

 

 

 

이렇게 약간의 설치 과정이 필요하지만 개발을 더 쉽고 간편하게 진행할 수 있습니다.

 

지금은 필수가 되어버린 Lombok 을 쉽게 사용해보세요.

 

728x90
반응형

'프로그래밍 > Spring' 카테고리의 다른 글

[Spring] Spring Boot 2 MyBatis 설정  (2) 2019.09.03
[Lombok] Mac OS X Lombok Install  (2) 2019.07.18
[STS] SpringToolSuite SVN 연결  (0) 2019.07.14
[Spring] Session Time Out Check  (2) 2019.05.31
[Spring] Thymeleaf Fragment Layout  (0) 2019.05.24
728x90
반응형

 

# OS환경은 CentOS 7.0으로 진행되었습니다.

설치 가능한 JDK 확인

yum 으로 설치 가능한 java 전체를 확인합니다.

[root@bonjin /]# yum list java*jdk-devel
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.neowiz.com
 * extras: mirror.kakao.com
 * updates: mirror.navercorp.com
Available Packages
java-1.6.0-openjdk-devel.x86_64                                 1:1.6.0.41-1.13.13.1.el7_3                                 base   
java-1.7.0-openjdk-devel.x86_64                                 1:1.7.0.221-2.6.18.0.el7_6                                 updates
java-1.8.0-openjdk-devel.i686                                   1:1.8.0.212.b04-0.el7_6                                    updates
java-1.8.0-openjdk-devel.x86_64                                 1:1.8.0.212.b04-0.el7_6                                    updates
java-11-openjdk-devel.i686                                      1:11.0.3.7-0.el7_6                                         updates
java-11-openjdk-devel.x86_64                                    1:11.0.3.7-0.el7_6                                         updates

 

 

 

 

다운로드를 받고 설치를 합니다.

[root@bonjin /]# yum install java-1.8.0-openjdk-devel.x86_64

y를 입력해서 계속 진행합니다.

...생략...
Install  1 Package (+50 Dependent packages)

Total download size: 52 M
Installed size: 177 M
Is this ok [y/d/N]: y

 

 

 

 

쭉~~ 긴 내용이 지나가고 Complete 라는 문구가 나오면 정상적으로 설치가 되었습니다.

...생략...
Complete!

 

 

 

설치가 잘됬는지 확인합니다.

rpm -qa java*jdk-devel 명령어를 실행하면 설치가 되어있는지 RPM Package 를 확인할 수 있습니다.

[root@bonjin /]# rpm -qa java*jdk-devel
java-1.8.0-openjdk-devel-1.8.0.212.b04-0.el7_6.x86_64

 

 

 

java -version 을 확인해보면 설치된 java 정보가 보입니다.

[root@bonjin /]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

 

 

 

Oracle JDK 가 유료화 되었다고 신경쓰지 말고! Open JDK 를 맘 편하게 사용해 보세요!

 

728x90
반응형

'프로그래밍 > Server' 카테고리의 다른 글

[AWS] EC2 인스턴스 생성  (0) 2020.05.21
[AWS] AWS 가입하기  (0) 2020.05.20
[Tomcat] JAVA_HOME 수동 설정  (0) 2019.06.18
[Tomcat] cannot restore segment prot after reloc: Permission denied  (0) 2019.06.17
[WebtoB] Log Directory  (0) 2019.04.15
728x90
반응형

 

 

STS 에 SVN 설치도 문제없이 진행했습니다.

 

https://gigas-blog.tistory.com/146

 

[STS] SpringToolSuite SVN 설치

Spring Framework 를 생각하면 STS를 빼놓을순 없습니다. Eclipse 기반으로 기존 Eclipse를 사용하셨던 분들이라면 큰 어려움 없이 사용할 수 있습니다. https://spring.io/tools Spring Tools 4 Spring Tools 4 i..

gigas-blog.tistory.com

 

 

 

 

정작 프로젝트와 연결을 하지 않았는데요.

 

새로 생성한 프로젝트를 SVN Server와 연결을 해보겠습니다.

 

저는 Spring stater 프로젝트를 한개 만들었습니다.

 

프로젝트를 클릭하고 마우스 우클릭을 합니다.

 

Team -> Share Project... 을 클릭합니다.

 

 

 

이전에 설치한 SVN Software 가 보이는데 SVN을 선택하고 Next 버튼을 클릭합니다.

 

 

 

 

이전글에서 연결한 SVN Repository 가 보여지게 됩니다.

 

만약에 연결하지 않았다면 Create a new repository location 을 선택후 등록하시면 됩니다.

 

저는 이미 등록을 했으니 Use exising repository location 을 선택하고 Next 버튼을 클릭합니다.

 

 

 

SVN Repository 이름과 프로젝트 이름을 동일하게 해서 이름이 겹치게 보여지는데.

 

이름을 다르게 해주시는게 편할것 같네요.

 

그대로 Finish 버튼을 클릭해서 연결을 마무리 합니다.

 

 

 

 

새로 연결을 해서 동기화가 이루어 집니다.

 

Yes를 눌러서 진행하겠습니다.

 

 

 

 

 

동기화를 하려니 다 + 버튼으로 보여지게 되죠.

 

SVN Repository 에 없는 파일들이니 회색의 + 화살표가 보여지게 됩니다.

 

전체를 Commit... 버튼을 클릭해서 올려보도록 하겠습니다.

 

 

 

간단한 Comment 를 작성해서 올리겠습니다.

 

어떤걸 수정하였는지 다른 팀원에게 전달하거나 다시 history를 볼 경우 편하게 Version을 확인할 수 있는 용도로 작성합니다.

 

 

새로 연결을 하고 주석을 추가하여 내용을 수정해 보겠습니다.

 

 

 

 

 

 

SVN Repository 와 비교하여 변경된 내용이 있는지 확인해봅니다.

 

Team -> Synchronize with Repository 메뉴를 클릭합니다.

 

 

 

 

SVN Repository 와 비교를 해봤는데 내용이 수정되었다고 나오네요!

 

변경된 파일을 보면 회색 화살표로 되어있는데 이건 서버에 파일은 있지만 내가 갖고있는 파일이 변경되었다라는걸 보여줍니다.

 

 

변경된걸 Commit 해보겠습니다.

 

동일하게 간단하게 Comment 도 달아줍니다.

 

 

 

 

정상적으로 Commit이 되고 나면 파일 옆에 3이라는 Version 코드가 수정이 되었고,

 

올린 Date, Author 가 보여지게 됩니다.

 

 

 

 

 

변경한 파일의 History를 확인해 보겠습니다.

 

Team -> Show History 메뉴를 클릭합니다.

 

 

 

최초에 올린 코멘트 다음으로 

 

Version 이 한단계 올라갔고 올린 Date와 올린 Author 와 Comment 가 보입니다.

 

History에서 목록을 클릭하면 예전 내용을 확인할 수 있습니다.

 

 

 

 

 

다시 Local 파일에서 추가했던 주석을 지워보겠습니다.

 

 

 

 

 

 

다시 SVN Repository 와 비교를 해보죠.

 

 

 

 

 

이번에도 역시 소스가 다르다는걸 한번에 확인할 수 있습니다.

 

 

 

다시 서버에 있는 코드를 받고 싶을 수 있습니다.

 

내 Local 코드를 덮어 씌워서 SVN 에 올라가 있는 코드로 바꿔보겠습니다.

 

변경할 파일을 마우스 우클릭합니다.

 

Override and Update 메뉴를 선택합니다.

 

 

 

Local 파일을 덮어 쓰겠다는 알림창이 나오는데 Yes 버튼을 클릭합니다.

 

덮어 씌워져도 History에서는 확인할 수 있습니다.

 

 

 

 

다시 SVN Repository 에 올라가 있는 코드를 덮어 씌웠습니다.

 

실수로 파일을 지우거나 수정을 잘못했다거나 할 경우 유용하게 사용됩니다.

 

 

 

 

 

정말 어렵지 않은 형상관리 인데 아직도 사용을 많이 안하시는 분들이 계십니다.

 

저희 회사에도 당연히 계시죠.

 

귀찮다 귀찮다 하고 팀원들과 소스를 맞추지 않고. 운영에 반영하고 이런일이 없기를 바라겠습니다.

 

728x90
반응형

'프로그래밍 > Tools' 카테고리의 다른 글

[XCode] Gitlab - #1 계정 연결하기  (0) 2019.11.08
[STS] SpringToolSuite SVN 설치  (0) 2019.07.13
[Mac OS X] Docker 설치  (0) 2019.04.26
Atom Editor 설치  (0) 2019.03.29
728x90
반응형

 

이전글에서는 SpringToolSuite 에서 SVN Software를 설치해봤습니다.

 

https://gigas-blog.tistory.com/146

 

[STS] SpringToolSuite SVN 설치

Spring Framework 를 생각하면 STS를 빼놓을순 없습니다. Eclipse 기반으로 기존 Eclipse를 사용하셨던 분들이라면 큰 어려움 없이 사용할 수 있습니다. https://spring.io/tools Spring Tools 4 Spring Tools 4 i..

gigas-blog.tistory.com

 

 

 

 

기존에 개인서버에서 SVN을 설치 하였거나 Local에 SVN을 설치하신 분들은 글을 따라 진행하면 되지만

 

SVN Server를 설치하지 않았다면 설치를 우선적으로 진행 후 글을 따라해주시기 바랍니다.

 

SVN Server는 별도의 글을 작성하여 URI를 공유하겠습니다.

 

 

 

 

 

SVN을 설치했으니 SVN 서버와 연결을 해보겠습니다.

 

STS우측 상단의 +버튼을 클릭합니다.

 

 

 

 

아래와 같이 SVN Repository Exploring 을 선택하고 Open 버튼을 클릭합니다.

 

 

 

 

창이 닫히면서 SVN Repositories 라는 탭이 보여지게 됩니다.

 

이 화면에서 다양한 프로젝트들을 연결하고 확인할 수 있습니다.

 

 

 

하지만 지금은 연결된게 없으니 새로 SVN 서버와 연결을 해보겠습니다.

 

SVN Repositories 탭안에서 마우스 우클릭을 합니다.

 

New -> Repository Location... 메뉴를 클릭합니다.

 

 

 

 

 

 

새로운 팝업창이 뜨게 됩니다.

 

Server 에서 SVN을 설치하면 나오는 주소를 입력하게 됩니다.

 

svn:// 으로 시작하는 주소를 넣어주고 Finish 버튼을 클릭합니다.

 

 

 

 

 

SVN에 등록한 Username 과 Password 를 입력해서 자격증명을 합니다.

 

 

 

 

 

정상적으로 증명이 되었다면 svn Server 와 연결이 된것을 확인할 수 있습니다.

 

 

 

 

정말 간단하게 연결을 완료했습니다.

 

다음글에서는 프로젝트를 생성해서 SVN Server에 올리는 방법을 알아보도록 하겠습니다.

 

728x90
반응형

'프로그래밍 > Spring' 카테고리의 다른 글

[Lombok] Mac OS X Lombok Install  (2) 2019.07.18
[Lombok] Windows OS Lombok Install  (0) 2019.07.17
[Spring] Session Time Out Check  (2) 2019.05.31
[Spring] Thymeleaf Fragment Layout  (0) 2019.05.24
[Spring] Thymeleaf 3 String 날짜 Format  (0) 2019.05.22
728x90
반응형

 

Spring Framework 를 생각하면 STS를 빼놓을순 없습니다.

 

Eclipse 기반으로 기존 Eclipse를 사용하셨던 분들이라면 큰 어려움 없이 사용할 수 있습니다.

 

https://spring.io/tools

 

Spring Tools 4

Spring Tools 4 is the next generation of Spring tooling for your favorite coding environment. Largely rebuilt from scratch, it provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code,

spring.io

 

 

 

프로젝트를 개발하다보면 다른 팀원들과 형상관리를 하면서 진행을 하는데요.

 

요즘들어 git을 많이 사용하기도 하죠. 

 

그래서인지 기본 지원하던 SVN을 수동으로 설치를 해야합니다.

 

 

 

 

 

기본적으로 설치가 되어있지 않다고 생각해서 설치하는 방법을 다루려고 합니다.

STS를 실행합니다.

 

 

 

상단 메뉴의 Help -> Eclipse Marketplase... 를 선택합니다.

 

FInd 필드에서 SVN을 검색합니다.

첫번째 목록에 SVN을 설치할 수 있도록 나옵니다.

 

Install 버튼을 클릭하면 설치를 진행할 수 있습니다.

 

 

설치하는 목록을 확인합니다.

확인이 되었다면 Confirm 버튼을 클릭해서 설치를 진행합니다.

 

라이센스 약관에 동의합니다.

동의를 해야만 설치가 마무리 됩니다.

 

동의를 하고 Finish 버튼을 누르면 화면이 닫히게 됩니다.

 

 

 

Eclipse 우측하단에 설치가 진행됩니다.

금방 설치가 됩니다.

 

 

 

보안경고창이 보여지게 됩니다.

외부 software 를 다운받으니 계속 설치를 진행할지 묻습니다.

 

그냥 Install anyway 버튼을 클릭합니다.

 

STS를 재시작합니다.

 

재시작이 되어야 설치한 SVN이 정상적으로 적용됩니다.

 

Restart Now 버튼을 클릭합니다.

 

 

 

 

STS가 다시 실행되고 우측 상단의 +가 있는 아이콘을 클릭합니다.

 

 

 

 

 

아래와 같이 SVN Repository Exploring 이 적용된것을 확인할 수 있습니다.

 

 

 

 

정말 간단하게 설치를 진행했습니다.

 

이런 형상관리 software는 정말로 필수입니다.

 

다른 팀원들과 함께 진행하는 프로젝트를 ZIP파일로 넘겨받는것이 아닌 하나의 Repository 에 저장하면서 공유를 해보는건 어떨까요?

 

다음글에서는 SVN 설정을 진행해보도록 하겠습니다.

 

728x90
반응형

'프로그래밍 > Tools' 카테고리의 다른 글

[XCode] Gitlab - #1 계정 연결하기  (0) 2019.11.08
[STS] SpringToolSuite SVN 프로젝트 연결  (2) 2019.07.15
[Mac OS X] Docker 설치  (0) 2019.04.26
Atom Editor 설치  (0) 2019.03.29
728x90
반응형

 

IE(익스플로러) 는 너무나 문제가 많은것 같습니다.

 

업데이트도 종료되었는데 한국은 ActiveX 나 exe 파일을 설치하여 시스템 정보를 확인하고 처리하는 작업이 많습니다.

 

대표적으로 은행관련 업무이죠.

 

그렇기에 IE 브라우저는 버리지 못하는 하나의 골칫덩어리가 되어졌습니다.

 

 

 

 

이번엔 특정 조건에 따라서 select option 의 선택값을 제어하려고 했습니다.

 

Jquery를 사용하여 아래와 같이 처리하던 코드들이 IE 에서는 동작하지 않았습니다.

$("선택자").hide();
$("선택자").show();

or

$("선택자").css('display','none');
$("선택자").css('display','block');

 

 

 

 

이런걸 해결하려고 script 로 select option 내용을 새로 만들어서 보여주는 방식도 있습니다.

 

하지만 보여는 주고 선택이 되지 않는 방법도 좋은방법인것 같아서 아래와 같이 진행했습니다.

 

간단하게 앞에 속성값을 추가함으로써 복잡한 로직을 추가하지않고 다른 브라우저에도 대응하도록 처리할 수 있습니다.

$("선택자").attr('disabled', 'disabled').hide();
$("선택자").removeAttr('disabled').show();

or

$("선택자").attr('disabled', 'disabled').css('display','none');
$("선택자").removeAttr('disabled').css('display','block');

 

 

 

 

업데이트도 진행되지않는 IE (익스플로러) 를 이제는 보내줘야 되지 않나 생각합니다.

 

728x90
반응형

'프로그래밍 > JavaScript' 카테고리의 다른 글

[Jquery] Textarea 자동 높이조절 라이브러리  (0) 2019.06.29
[Jquery] Jquery Cookie Plugin  (0) 2019.05.28
728x90
반응형

 

관리자 화면에서 공지사항이나 자주묻는 질문들을 저장하고, Client 에서 보여주도록 진행하고 있습니다.

 

하지만 Textarea 는 Enter 입력까지도 잘 보이지만 Content 내용에 맞게 높이조절을 하기가 여간 쉬운일이 아니었습니다.

 

PC 화면에서 로드가 되었을때 내용의 Scroll 의 높이를 가져온뒤 그 높이만큼 Textarea 높이를 바꿔주는 방식을 많이 사용하는것 같은데

 

이게 문제가 발생되는건 브라우저 크기가 변할때에는 반응을 하지 않아 최초 로드된 높이만을 갖고 있다는것입니다.

 

 

 

 

이 단점까지 처리해주는 라이브러리를 찾을수 있었습니다.

 

내용은 아래의 주소로 이동해서 확인할 수 있습니다.

 

https://www.jacklmoore.com/autosize/

 

Autosize

Autosize A small, stand-alone script to automatically adjust textarea height. Demo Released under the MIT License, source on Github (changelog)   Download Install via NPM npm install autosize Browser compatibility Chrome Firefox IE Safari iOS Safari Androi

www.jacklmoore.com

 

 

 

다운로드 받거나 CDN 을 사용하여 script를 불러옵니다.

 

<script src="https://rawgit.com/jackmoore/autosize/master/dist/autosize.min.js"></script>

 

autosize 라는 함수를 호출하면 간단하게 자동 높이 조절이 됩니다.

// TextArea 자동 높이 설정
autosize($("textArea"));

 

 

 

기본 사이즈는 css를 통해 주면 됩니다.

 

 

 

내용을 입력하거나 저장된 데이터를 불러와도 높이가 자동으로 설정됩니다.

 

 

 

반응형 홈페이지를 만드는 분들이라면 autosize 라는 라이브러리를 추천드리겠습니다.

 

728x90
반응형
728x90
반응형

 

한 서버에 java 버전이 하나라는 확신을 할 수는 없습니다.

 

기존에 설정된 서비스는 JAVA_HOME 환경변수를 보고 있고 새로 운영할 서비스는 새로운 JDK 버전을 설치해야하는 상황이 생겼습니다.

 

JAVA_HOME을 새로운 JDK version으로 보게 한다고 해서 문제가 되지 않을수도 있지만 특정 JDK 에서는 하위 version에서 사용하는 기능을 제거하여 경량화 한 JDK를 배포 하기도 하였습니다.

 

 

 

 

이러한 문제를 발생시키지 않으려면 특정 Was 설정에서 구동시 JAVA_HOME 설정이 어떤 위치를 보느냐가 중요합니다.

 

우선 자바가 설치되어있는 경로를 확인하고 tomcat 경로에서 bin/catalina.sh 파일을 열어줍니다.

 

/usr/java 경로에 설치되어있는 jdk 버전을 확인하고 catalina.sh 상단에 아래와 같은 문구를 추가 하여줍니다.

JAVA_HOME=/usr/java/jdk1.8.0_202

 

 

 

 

tomcat 경로에서 /bin 디렉토리 안의 startup.sh 명령어를 입력하여 tomcat을 실행합니다.

./startup.sh 

 

 

 

 

 

Using CATALINA_BASE:   /data/tomcat9
Using CATALINA_HOME:   /data/tomcat9
Using CATALINA_TMPDIR: /data/tomcat9/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_202
Using CLASSPATH:       /data/tomcat9/bin/bootstrap.jar:/data/tomcat9/bin/tomcat-juli.jar

 

위와같이 설정한 jdk가 잘 나온다면 잘 처리 된것입니다.

 

새로운 Jdk 설치는 이제 겁내지말고 즐기면서 하는 개발자가 됩시다.

 

728x90
반응형

'프로그래밍 > Server' 카테고리의 다른 글

[AWS] AWS 가입하기  (0) 2020.05.20
[CentOS] yum open jdk 설치  (0) 2019.07.16
[Tomcat] cannot restore segment prot after reloc: Permission denied  (0) 2019.06.17
[WebtoB] Log Directory  (0) 2019.04.15
[WebtoB] config Directory  (0) 2019.04.15
728x90
반응형

 

CentOS 서버에 jdck 1.8 을 설치하였고, Tomcat 9 버전도 같이 설치하였습니다.

 

tomcat 을 실행하는 순간 아래와 같은 오류가 발생하였습니다.

failed /usr/java/jdk1.8.0_202/jre/lib/i386/server/libjvm.so, 
because /usr/java/jdk1.8.0_202/jre/lib/i386/server/libjvm.so: 
cannot restore segment prot after reloc: Permission denied

 

 

 

 

터미널에서 아래 명령을 실행하여 SELinux를 비활성화 합니다.

/usr/sbin/setenforce 0

 

 

 

 

SELinux를 활성화 하려면 아래 명령을 실행합니다.

/usr/sbin/setenforce 1

 

 

 

 

원하는 명령을 실행한다음 Confluence를 다시 시작합니다.

 

원하는 오류는 없어졌지만 서버 설정은 너무나 많은 정보로 뭉쳐져 있기에 어려움이 많은것 같습니다.

 

그래도 열심히 정리를 하도록 하겠습니다.

 

728x90
반응형

'프로그래밍 > Server' 카테고리의 다른 글

[CentOS] yum open jdk 설치  (0) 2019.07.16
[Tomcat] JAVA_HOME 수동 설정  (0) 2019.06.18
[WebtoB] Log Directory  (0) 2019.04.15
[WebtoB] config Directory  (0) 2019.04.15
[WebtoB] Directory 구조  (0) 2019.04.15
728x90
반응형

 

Spring Boot security 를 구현하여 로그인, 로그아웃을 처리하고 있습니다.

 

고객이 로그아웃을 할때에 기록을 남겨 달라는 고객사의 요청이 있었습니다.

 

Security 를 사용할때 편하게 Session이 소멸시점을 체크할 수 있는 방법을 알아보겠습니다.

 

 

 

 

Security 설정에서 logout 을 세션을 초기화하는 코드를 작성합니다.

.and().logout()
      .logoutUrl("/logout")
      .logoutSuccessUrl("/login")  // 로그아웃 성공시 메인 고정
      .invalidateHttpSession(true)    // session invalidate
      .deleteCookies("JSESSIONID")	// cookie
      .permitAll()

 

 

 

Member Entity 입니다.

@Data
@Entity
@Table(name = "테이블")   // 회원 테이블
public class Member implements UserDetails {

	...
    
    /************************************
        UserDetails Override functions
     ************************************/
    /**
     * 사용자에게 부여된 권한
     */
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
    	Set<GrantedAuthority> roles = new HashSet<>();
		role.forEach(e -> {
    		roles.add(new SimpleGrantedAuthority(e.getValue()));
    	});
    	return roles;
    }

    /**
     * 사용자 인증에 사용된 암호
     */
    @Override
    public String getPassword() {
        return memberPw;
    }

    /**
     * 사용자 인증에 사용된 이름
     */
    @Override
    public String getUsername() {
        return memberId;
    }

    /**
     * 사용자 계정 만료 여부
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 사용자가 잠김 여부
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 사용자의 자격증명(암호)이 만료 여부
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 사용자의 사용가능여부
     */
    @Override
    public boolean isEnabled() {
        return true;
    }
}

 

 

 

 

 

session 이 소멸하게 되면 아래의 listener 로 진입합니다.

 

SessionDestroyedEvent를 implemets 하면 security 로그인했던 사용자 정보를 담아두고 있습니다.

 

사용자는 UserDetails 를 상속받거나 User를 구현했다면 정보를 조회할 수 있습니다.

 

이때는 request 가 없기 때문에 필요한 정보는 미리 UserDetails 에 넣어둔 뒤 소멸되는 시점에 기록을 남기면 됩니다.

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.session.SessionDestroyedEvent;
import org.springframework.stereotype.Component;

import com.kcknock.primary.domain.Member;
import com.kcknock.primary.domain.MemberState;
import com.kcknock.primary.repository.MemberStateRepository;

/**
 * sessionDestroyed 요청시
 * @author gigas
 */
@Component
public class SessionDestroyListener implements ApplicationListener<SessionDestroyedEvent>{

	@Autowired
	private MemberStateRepository memberStateRepository;
	
	@Override
	public void onApplicationEvent(SessionDestroyedEvent event) {
		List<SecurityContext> securityContexts = event.getSecurityContexts();

        for (SecurityContext securityContext : securityContexts) {
        	
        	Member member = (Member)securityContext.getAuthentication().getPrincipal();
        	
        	MemberState memberState = new MemberState();
        	memberState.setMemberId(member.getMemberId());
        	memberState.setType("로그아웃");
//        	memberState.setDevice("");
//        	memberState.setIpAddr("");
//        	memberState.setOs("");
        	
        	memberStateRepository.save(memberState);
        }
	}
}

 

 

 

 

소멸시점을 check 하는것처럼 생성시점도 아래와 같이 확인할 수 있습니다.

@Component
public class SessionCreateListener implements ApplicationListener<SessionCreationEvent> {

	@Override
	public void onApplicationEvent(SessionCreationEvent event) {
    
    }
}

 

 

 

 

이와같은 코드를 작성하면서 세션이 초기화되면 자동로그아웃을 구현해야겠다는 생각이 들었습니다.

 

하지만 찾아본 결과로는 해당 session 을 처리하는 곳에선 request 정보가 없기때문에 처리가 어렵다는 글들이 많던데..

 

최대한 '자동로그아웃' 기능을 찾아서 글로 남겨보도록 하겠습니다.

728x90
반응형

+ Recent posts