이제 슬슬 스프링시큐리티에 대하여 자신감이 붙기 시작했으리라 생각한다. 자신감이 생기면 내 마음대로 고쳐보고싶은게 생기기 마련인데 이 포스팅에서는 가장만만한 로그인화면부터 수정하는 방법에 대하여 알아보고자 한다.
로그인화면 만들기
<!DOCTYPE html>
<html lang="en">
<body>
<div class="container">
<form class="form-signin" method="post" action="/login">
<h2 class="form-signin-heading">Please sign in</h2>
<p>
<label for="username" class="sr-only">Username</label>
<input type="text" id="username" name="username" class="form-control" placeholder="Username" required autofocus>
</p>
<p>
<label for="password" class="sr-only">Password</label>
<input type="password" id="password" name="password" class="form-control" placeholder="Password" required>
</p>
<input name="_csrf" type="hidden" value="7749bebe-3123-40cc-ac4a-777893ce6186" />
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
</body>
</html>
기본으로 제공되어지는 스프링 시큐리티 로그인화면이다. 자세히 살펴보면 전송은 POST방식으로 URL은 /login으로 되어 있다.
그 외에 _csrf라고 적혀있는 토큰이 있는데 토큰에 대해서는 나중에 따로 이야기를 하도록 하고 지금은 그냥 넘어간다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="id" placeholder="아이디">
<input type="password" name="pw" placeholder="비밀번호">
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}"/>
<button type="submit">로그인</button>
</form>
</body>
</html>
기존 스프링시큐리티의 로그인 화면을 이용하여 직접 만든 로그인페이지 이다.
input태그의 name 값을 변경해도 되냐고 물어본다면 Okay다. 하지만 action부분의 /login은 동일하게 해주어야 한다.
아직 사용자인증 로직을 만든적이 없기 때문에 우선은 스프링시큐리티에서 제공하는 기본 인증로직을 사용해야 하기 때문이다.
추가적인 설명은 xml파일을 설정하면서 따로 기술하도록 하겠다.
컨트롤러(Controller)
@Controller
public class HomeController {
@RequestMapping(value = "/loginPage")
public String login() {
return "loginPage";
}
@RequestMapping(value = "/admin")
public String admin() {
return "admin";
}
@RequestMapping(value = "/user")
public String user() {
return "user";
}
@RequestMapping(value = "/all")
public String all() {
return "all";
}
}
드디어 자바가 나왔다!! 명심하자 우리는 자바 개발자다..
로그인 화면을 호출하는 컨트롤러를 만들었고 이왕 만드는김에 나중에 권한별로 제대로 권한체크를 하는지 테스트해볼 테스트 페이지와
컨트롤러도 같이 만들어 보았다.
security-context.xml
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/user/**" access="hasAnyRole('ROLE_USER','ROLE_GUEST')"/>
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/**" access="permitAll"/>
<form-login
username-parameter="id"
password-parameter="pw"
login-processing-url="/login"
login-page="/loginPage"
default-target-url="/all" />
</http>
설정부분의 xml파일인데 form-login부분이 새로 추가되었다. 아마 속성과 속성값을 보면 대략적으로 이해가 될 것이다.
아래에서는 form-login에서 사용되는 속성과 속성값에 대해서 알아보도록 하겠다.
#form-login 속성
username-parameter : input 태그의 name(계정) 속성 값(여기서 말하는 username-parameter의 username은 아이디를 의미한다)
password-parameter : input 태그의 비밀번호 name 속성 값 (default: password)
login-page : 로그인 화면 url
login-processing-url form : 태그의 action 속성 (default : /login)
default-target-url : 로그인 성공시 url
authentication-failure-url : 로그인 실패시 url (default: /login?error=1)
authentication-success-handler-ref : 로그인 성공시 default-target-url이 아닌 핸들러로 리다이렉트
authentication-failure-handler-ref : 로그인 실패시 authentication-failure-url이 아닌 핸들러로 리다이렉트
always-use-default-target : 무조건 핸들러가 지정한 페이지로 이동 (default: false)
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 5. Mybatis를 이용하여 DB연동하기 (1) | 2020.02.08 |
---|---|
[Spring Security] 4. 로그아웃(logout) 구현하기 (0) | 2020.02.07 |
[Spring Security] 2. 권한설정 (0) | 2020.02.07 |
[Spring Security] 1. 기본설정 하기 (3) | 2020.02.07 |
댓글