개발 블로그
[eGov] 스프링 시큐리티 커스텀하기 본문
컨트롤러나 view 설정없이 기본으로 이 화면이 뜨게되는데 맘에 안 드니 바꾸기로 한다
[WEB-INF] - [ jsp ] - [ member ]
우선 login.jsp를 만들어서 아래와 같이 입력
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
.login-page {
width: 360px;
padding: 8% 0 0;
margin: auto;
}
.form {
position: relative;
z-index: 1;
background: #ffffff;
max-width: 360px;
margin: 0 auto 100px;
padding: 45px;
text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
}
.form input {
font-family: "Roboto", sans-serif;
outline: 0;
background: #f2f2f2;
width: 100%;
border: 0;
margin: 0 0 15px;
padding: 15px;
box-sizing: border-box;
font-size: 14px;
}
.form button {
font-family: "Roboto", sans-serif;
text-transform: uppercase;
outline: 0;
background: #4caf50;
width: 100%;
border: 0;
padding: 15px;
color: #ffffff;
font-size: 14px;
cursor: pointer;
}
.form button:hover,
.form button:active,
.form button:focus {
background: #43a047;
}
.form .message {
margin: 15px 0 0;
color: #b3b3b3;
font-size: 12px;
}
.form .message a {
color: #4caf50;
text-decoration: none;
}
.form .register-form {
display: none;
}
.container {
position: relative;
z-index: 1;
max-width: 300px;
margin: 0 auto;
}
.container:before,
.container:after {
content: "";
display: block;
clear: both;
}
.container .info {
margin: 50px auto;
text-align: center;
}
.container .info h1 {
margin: 0 0 15px;
padding: 0;
font-size: 36px;
font-weight: 300;
color: #1a1a1a;
}
.container .info span {
color: #4d4d4d;
font-size: 12px;
}
.container .info span a {
color: #000000;
text-decoration: none;
}
.container .info span .fa {
color: #ef3b3a;
}
</style>
</head>
<body>
<c:url value="/login" var="loginUrl" />
<form:form class="form-signin" method="POST" action="${loginUrl}">
<c:if test="${param.error != null}">
<p style="color: blue">아이디와 비밀번호가 잘못되었습니다.</p>
</c:if>
<div class="login-page">
<div class="form">
<input type="text" name="userid" placeholder="Username" />
<input type="password" name="password" placeholder="Password" />
<button type="submit">Login</button>
</div>
</div>
</form:form>
</body>
</html>
앞서 taglib dependency를 등록해주었기 때문에 스프링 시큐리티 태그를 사용할 수 있다.
<!-- JSP에서 Spring Security Tag 사용을 위한 dependency 등록 Start -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<!-- JSP에서 Spring Security Tag 사용을 위한 dependency 등록 End -->
여기서 중요한 것은 <form> 태그의 action URL과 method 방식,
그리고 아이디와 패스워드를 입력하는 <input> 태그의 name이다
로그인 체크 로직을 간단하게 구현하기 위해 jstl 태그를 이용했다
그리고 컨트롤러에 메소드 생성, 방금 만든 jsp를 연결
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd">
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/member/loginPage.do" access="permitAll"/>
<intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />
<form-login login-page="/member/loginPage.do"
username-parameter="userid"
password-parameter="password"
authentication-failure-url="/member/loginPage.do?error"
default-target-url="/"
/>
<session-management>
<concurrency-control max-sessions="1" expired-url="/" />
</session-management>
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query=
"SELECT USERID AS USERNAME,
PASSWORD,
1 AS ENABLED
FROM SS_MEMBER
WHERE USERID = ?"
authorities-by-username-query=
"SELECT USERID AS USERNAME,
AUTHORITY
FROM SS_MEMBER
WHERE USERID = ?"
/>
</authentication-provider>
</authentication-manager>
</beans:beans>
intercept-url
: 설정 잘 해야함 이 순서 때문에 오류가 난다
loginform 을 만들어 놓고 추가하지 않아도 오류가 생김
loginform 순서는 제일 앞에 위치하게 한다
<form-login login-page="/member/loginPage.do"
username-parameter="userid"
password-parameter="password"
authentication-failure-url="/member/loginPage.do?error"
default-target-url="/" />
: form 로그인에 대한 custom 설정이다
SpEL 문법 : use-expressions=true를 해야지 사용 가능
표현식 | 설명 |
hasRole('role1') | 권한(role1)을 가지고 있는 경우 접근 가능 |
hasAnyRole('role1', 'role2') | 권한들(role1, role2) 중 하나라도 가지고 있는 경우 접근 |
permitAll | 권한이 없어도 모든 곳에 접근 가능 |
denyAll | 권한이 있어도 모든 곳에 접근 불가능 |
isAnonymouse() | 인증하지 않은 게스트 사용자 여부 |
isRememberMe() | Remember-me 로그인 기능을 사용하는 사용자 여부 |
isAuthenticated() | 인증한 사용자 여부 |
isFullyAuthenticated() | 게스트 사용자도 아니고 Remember-me 사용하는 사용자도 아닌지 여부 |
'전자 정부 프레임워크' 카테고리의 다른 글
[eGov] 스프링 시큐리티 암호화 회원가입 (0) | 2023.04.05 |
---|---|
[eGov] MVC 파일 구조 변경하고 그에 따른 설정도 변경 (0) | 2023.03.31 |
[eGov] 스프링 시큐리티 DB와 연결하기 (0) | 2023.03.31 |
[eGov] 스프링 시큐리티 기본 설정 (0) | 2023.03.31 |
[eGov] eGovFrameWebProject sample 삭제 (0) | 2023.03.30 |