일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 생활코딩
- 맥
- 대덕인재개발원
- spring
- Mac
- Error
- Android
- jsp
- ibatis
- Oracle
- html
- API
- 자바
- python
- crud
- 반복문
- Homebrew
- ddit
- 객체지향
- servlet
- JDBC
- 이클립스
- pyqt
- 배열
- 자바문제
- 단축키
- 컬렉션프레임워크
- FastAPI
- Java
- nodejs
Archives
- Today
- Total
romworld
Spring 25 - cecurity (자동로그인 구현해보자) 본문
자동로그인 테이블 생성
CREATE TABLE PERSISTENT_LOGINS(
USERNAME VARCHAR2(50),
SERIES VARCHAR2(200),
TOKEN VARCHAR2(200),
LAST_USED TIMESTAMP,
CONSTRAINT PK_PL PRIMARY KEY(SERIES)
);
<security-context.xml>
- security:http 수정
<!-- 데이터소스를 지정하고 테이블을 이용해서 기존 로그인 정보를 기록
쿠키의 유효시간을 지정함
token-validity-seconds : 쿠키의 유효시간(초) 604800초는 7일
-->
<security:remember-me data-source-ref="dataSource"
token-validity-seconds="604800" />
<!-- 로그아웃 처리를 위한 URI를 지정하고, 로그아웃한 후에 세션을 무효화 함
customLogoutSuccessHandler(사용자정의 로그아웃 성공 처리자)
JSESSION_ID : 웹브라우저(유일한 세션)의 그 유일한 세션값을 쿠키에 담고있음
-->
<security:logout logout-url="/logout" invalidate-session="true"
success-handler-ref="customLogoutSuccessHandler"
delete-cookies="remember-me,JSESSION_ID" />
<loginForm.jsp>
- <input type="checkbox" name="remember-me"
class="custom-control-input"
id="customCheck"> - name="remember-me" 로그아웃을 하지 않는 이상 유지가 됨
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<div class="row justify-content-center">
<div class="col-xl-10 col-lg-12 col-md-9">
<div class="card o-hidden border-0 shadow-lg my-5">
<div class="card-body p-0">
<!-- Nested Row within Card Body -->
<div class="row">
<div class="col-lg-6 d-none d-lg-block bg-login-image"></div>
<div class="col-lg-6">
<div class="p-5">
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1>
<h2>${error}</h2>
<h2>${logout}</h2>
</div>
<form class="user" action="/login" method="post">
<div class="form-group">
<input type="text" class="form-control form-control-user"
id="username" name="username" aria-describedby="username"
placeholder="아이디를 입력해주세요" required="required">
</div>
<div class="form-group">
<input type="password" class="form-control form-control-user"
id="password" name="password" placeholder="비밀번호를 입력해주세요" required="required">
</div>
<div class="form-group">
<div class="custom-control custom-checkbox small">
<input type="checkbox" name="remember-me"
class="custom-control-input"
id="customCheck"> <label class="custom-control-label"
for="customCheck">Remember Me</label>
</div>
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
Login </button>
<hr />
<!--
CSRF(Cross-site request forgery)
크로스 사이트 요청 위조는 웹 사이트 취약점 공격의 하나로,
사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위
(수정, 삭제, 등록)를 웹사이트에 요청하게 하는 공격
-->
<sec:csrfInput/>
</form>
<hr>
<div class="text-center">
<a class="small" href="register.html">Create an Account!</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
재기동 후 로그인 -> 페이지를 나가도 다시 접속했을 때 로그인이 유지가 된다.
그리고 데이터 베이스에도 데이터가 들어간다.
Comments