본문 바로가기
Spring/Spring 기초

e7e샘의 시큐리티 설정2(AJAX토큰사용/로그인페이지 설정)

by 미눅스[멘토] 2023. 8. 29.
728x90

 

SECURITY  AJAX바닐라 방식일떄

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>미누천사</h1>
<form action="/sec/logout" method="post">
    <sec:csrfInput/>
    <button>로그아웃 이지용!!</button>
</form>
<input type="text" id="bj" value="범진 메롱"><br>
<button onclick="fAjax()">아작스 전송</button>
<script>
    //csrf 토큰은 get방식에는 안 보내도 됨!
    //서버에서 발행된 헤더네임과 토큰갑사 저장
    var header = '${_csrf.headerName}';
    var token =  '${_csrf.token}';
    var myBJ = document.querySelector("#bj")

    function fAjax(){
        console.log(myBJ.value)
        let xhr = new XMLHttpRequest();
        xhr.open("post","/sec/angma/seoju",true);
        //바닐라 자바스크립트 사용시 AJAX send 전에 헤더값 세팅 필요
        xhr.setRequestHeader(header,token);
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4 && xhr.status ==200){
                console.log(xhr.responseText)
            }
        }
        xhr.send(myBJ.value)
    }
</script>

</body>
</html>

 

요소에 보면 header와 token이 변형된걸 볼 수 있다

이걸 꼭 항상 확인하고 넘어가야함!!

 

 

 

 

 

시큐리티가 정말 꼴보기 싫다하면

security-context.xml에

이거 추가해주면 됨

<!--         <security:csrf disabled="true"/> -->

 

로그인 페이지 만들어주는것이 아닌 내가 만든 것을 쓰고 싶다하면

auto-config="true"지워주고

<security:form-login  login-page="/mylogin" /> 를 넣어줌

ㄴ이거는 controller경로를 찾아가서 처리할 그에 맞는 url로 지정해줌

 

 

 

 

그리고 컨트롤러 생성

 

그럼이제 jsp생성

 

 

mylogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h1>WelCom Please Login</h1>
    <form action="/sec/login" method="post">
        <sec:csrfInput/>
        ID<input type="text" name="username" value=""><br>
        PASSWORD<input type="password" name="password" value=""><br>
        <input type="submit" value="Login">
    </form>
   
    <hr>
    <h1>Good bye Logout</h1>
    <form action="/sec/logout" method="post">
        <sec:csrfInput/>
        <input type="submit" value="Logout">
    </form>
</body>
</html>

 

 

실행해보면 내가 설정한 화면 나옴