본문 바로가기
개발/Spring

[Spring Security] Custom Login 만들기

by 상용최 2020. 7. 12.
반응형

Spring Security를 적용하고 따로 설정을 하지 않으면 자체적으로 제공하는 Login Form을 사용한다.

하지만 대부분의 서비스는 서비스에 알맞는 Login Form을 사용하고 싶어한다.

Custom Login Page를 어떻게 제작하는지 간단하게 살펴보겠다.

 

 

순서는 아래와 같이 크게 3가지로 나뉜다. 

  1. SecurityConfig 등록
  2. formLogin설정 변경
  3. logout설정 등록

1. SecurityConfig등록

SecurityConfig를 등록해준다. http.formLogin().loginPage(사용할 페이지) 로 설정해준다.

이때 주의할점이 .permitAll()을 꼭 설정해줘야한다.

로그인을 해야하는데 권한이 없어서 들어가지 못하는 상황이 발생할 수 있다.

로그인페이지를 커스텀하게되면 로그아웃을 담당해주던 Filter가 더이상 동작하지 않는다.

그렇기때문에 http.logout().logoutSuccessUrl(성공시 갈 url) 을 적어줘야한다.

 

 

configure(AuthenticationManagerBuilder auth)에서 실제 사용할 userDetailService를 설정한다.

실제인증을 처리할 userDetailsService


 

/login 로 요청이오면 해당 View파일을 돌려준다.

@Controller
public class PageController {
    @GetMapping("/")
    public String home(){
        return "home";
    }

    @GetMapping("/login")
    public String login(){
        return "user/login";
    }
}

PageController.java

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JOIN</title>
</head>
<body>
    <p>ID : <input type="text" id="email" name="username"></p>
    <p>PASSWORD : <input type="password" id="password" name="password"></p>
    <button id="joinBtn" onclick="login()">Login</button>
</body>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="/js/user/login.js"></script>
</html>

login.html

function login(){
    const email = document.getElementById('email').value;
    const password = document.getElementById('password').value;
    let userInfo = {};

    userInfo.username = email;
    userInfo.password = password;

    $.ajax({
        type: "post",
        url: "/login",
        data: userInfo,
        success: function(data) {
            alert('성공');
            console.log(data);
            //location.href="/"
        },
        error: function(e){
            alert('error!!');
        }
    });
}

login.js

 

get 방식으로 /login을 요청하면 Custom Login Page를 돌려줄것이다.

post 방식으로 /login을 요청하면 Security가 제공해주는 로그인 로직을 타게된다. 

 

post 방식으로 보낼때 주의할점은 content-type을 application-json으로 보내면 안된다는 점이다.

파라미터 이름도 따로 설정하지 않으면 username, password로 맞춰주어야한다.

 

 

 

 

세줄 요약

1. 사용할 Login Page에 알맞는 설정을 한다. 

2. 설정을 할때 permitAll을 꼭 해준다.

3. post방식으로 보낼 때 데이터 타입과 파라미터 이름을 맞춰야 한다.

 

반응형

댓글