-
스프링부트 스프링시큐리티 연동하기(4) 커스텀login.jsp/join.jsp/home.jspSpring Security 2019. 6. 29. 21:46반응형
1.시큐리티 커스텀 로그인 login.jsp 작성
(login.jsp)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>로그인</title><scriptintegrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="crossorigin="anonymous"></script><!-- 합쳐지고 최소화된 최신 CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"><!-- 부가적인 테마 --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css"></head><body><div class="container"><div class="row" style="padding-top:20%"><div class="col-md-4 "></div><div class="col-md-4" style="flex-align:center"><div class="card"><h5 class="card-header">로그인</h5><div class="card-body"><form action="/login/login-processing" method='POST' ><div class="form-group"><label for="InputId"> 아이디</label><input type="text" class="form-control" id="id" name="id" placeholder="ID"></div><div class="form-group"><label for="InputPassword1">패스워드</label><input type="password" class="form-control" id="password" name="password" placeholder="Password"></div><div class="checkbox"><label><input type="checkbox" name="remember-me"> 아이디 기억하기</label></div><button name="submit" type="submit" class="btn btn-block btn-primary text-light">로그인</button></form></div></div></div></div></div></body><script>$(document).ready(function(){<c:if test="${not empty msg}">alert('${msg}');</c:if>});</script></html>ccs는 부트스트랩을 사용하였고 form action 주소,id,password input name은 config에 설정한 로그인 프로세스를 수행하는 url을 적었다.
2.회원가입 join.jsp 작성
(join.jsp)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>회원가입</title><script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script><!-- 합쳐지고 최소화된 최신 CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"><!-- 부가적인 테마 --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css"><style>/* .help-block 을 일단 보이지 않게 설정 */#myForm .help-block{display: none;}/* glyphicon 을 일단 보이지 않게 설정 */#myForm .glyphicon{display: none;}</style></head><body><div class="container"><h3>회원가입 폼 입니다.</h3><form action="/join/insert" method="post" id="myForm"><div class="form-group has-feedback"><label class="control-label" for="id">아이디</label><input class="form-control" type="text" name="id" id="id"/><span id="overlapErr" class="help-block">사용할 수 없는 아이디 입니다.</span><span class="glyphicon glyphicon-ok form-control-feedback"></span></div><div class="form-group has-feedback"><label class="control-label" for="memberName">이름</label><input class="form-control" type="text" name="memberName" id="memberName"/></div><div class="form-group has-feedback"><label class="control-label" for="pwd">비밀번호</label><input class="form-control" type="password" name="password" id="password"/><span id="pwdRegErr" class="help-block">8글자 이상 입력하세요.</span><span class="glyphicon glyphicon-ok form-control-feedback"></span></div><div class="form-group has-feedback"><label class="control-label" for="rePwd">비밀번호 재확인</label><input class="form-control" type="password" name="rePwd" id="rePwd"/><span id="rePwdErr" class="help-block">비밀번호와 일치하지 않습니다. 다시 입력해 주세요.</span><span class="glyphicon glyphicon-ok form-control-feedback"></span></div><div class="form-group has-feedback"><label class="control-label" for="email">이메일</label><input class="form-control" type="text" name="email" id="email"/><span id="emailErr" class="help-block">올바른 이메일 형식이 아닙니다. 다시 입력해 주세요.</span><span class="glyphicon glyphicon-ok form-control-feedback"></span></div><div class="form-group has-feedback"><label class="control-label" for="userRole">권한</label><select class="form-control" id="userRole" name="userRole"><option value="ROLE_USER">일반회원</option><option value="ROLE_ADMIN">관리자</option></select></div><button class="btn btn-success" type="submit">가입</button></form></div><script>//아이디 입력란에 keyup 이벤트가 일어 났을때 실행할 함수 등록$("#id").keyup(function(){//입력한 문자열을 읽어온다.var id=$(this).val();//ajax 요청을 해서 서버에 전송한다.$.ajax({method:"post",url:"/join/idCheck",data:{inputId:id},success:function(data){console.log(data);if(data){//사용 가능한 아이디 라면$("#overlapErr").hide();// 성공한 상태로 바꾸는 함수 호출successState("#id");}else{//사용 가능한 아이디가 아니라면$("#overlapErr").show();errorState("#id");}}});});$("#password").keyup(function(){var pwd=$(this).val();// 비밀번호 검증할 정규 표현식var reg=/^.{8,}$/;$("#pwdRegErr").hide();successState("#password");}else{//정규표현식을 통과하지 못하면$("#pwdRegErr").show();errorState("#password");}});$("#rePwd").keyup(function(){var rePwd=$(this).val();var pwd=$("#password").val();// 비밀번호 같은지 확인if(rePwd==pwd){//비밀번호 같다면$("#rePwdErr").hide();successState("#rePwd");}else{//비밀번호 다르다면$("#rePwdErr").show();errorState("#rePwd");}});$("#email").keyup(function(){var email=$(this).val();// 이메일 검증할 정규 표현식var reg=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;$("#emailErr").hide();successState("#email");}else{//정규표현식을 통과하지 못하면$("#emailErr").show();errorState("#email");}});// 성공 상태로 바꾸는 함수function successState(sel){$(sel).parent().removeClass("has-error").addClass("has-success").find(".glyphicon").removeClass("glyphicon-remove").addClass("glyphicon-ok").show();$("#myForm button[type=submit]").removeAttr("disabled");};// 에러 상태로 바꾸는 함수function errorState(sel){$(sel).parent().removeClass("has-success").addClass("has-error").find(".glyphicon").removeClass("glyphicon-ok").addClass("glyphicon-remove").show();$("#myForm button[type=submit]").attr("disabled","disabled");};</script></body></html>아이디 중복체크를 하고 회원가입을 하는 페이지를 작성하였다.
가입시 권한 셀렉트 박스를 만들고 value에 권한명을 넣었다. 권한을 부여하는 방법은 개발자가 마음대로 하면된다.
3.로그인 후 이동되는 home.jsp 작성
(home.jsp)
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="UTF-8"><title>로그인 성공</title><scriptintegrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="crossorigin="anonymous"></script><!-- 합쳐지고 최소화된 최신 CSS --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"><!-- 부가적인 테마 --><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css"></head><body><div class="container"><h1>로그인 성공</h1>- 권한을 체크하는 태그 입니다.<br/>* 로그인 되지 않았다면 [TRUE] 입니다.<br/><sec:authorize access="isAnonymous()">[TRUE]</sec:authorize><br/><br/>* 로그인 했다면 참입니다.<br/> <sec:authorize access="isAuthenticated()">[TRUE]</sec:authorize><br/>* 인자로 주어진 ROLE_ADMIN을 가지고 있다면 [TRUE]입니다.<br/><br/> <sec:authorize access="hasRole('ROLE_ADMIN')">[TRUE]</sec:authorize><br/>* 인자로 주어진 ROLE_USER을 가지고 있다면 [TRUE]입니다.<br/> <sec:authorize access="hasRole('ROLE_USER')">[TRUE]</sec:authorize><br/><br/>* 인자로 주어진 ROLE_ADMIN을 가지고 있지 않다면 [TRUE]입니다.<br/> <sec:authorize access="!hasRole('ROLE_ADMIN')">[TRUE]</sec:authorize><br/><br/>* 인자로 주어진 ROLE_USER을 가지고 있지 않다면 [TRUE]입니다.<br/> <sec:authorize access="!hasRole('ROLE_USER')">[TRUE]</sec:authorize><br/><br/>* 인자로 주어진 롤들중 하나라도 가지고 있다면 [TRUE]입니다.<br/> <sec:authorize access="hasAnyRole('ROLE_ADMIN','ROLE_USER')">[TRUE]</sec:authorize><br/><br/>* 이 사용자는 "Rememember Me Cookies"로 자동 로그인이라면 [TRUE]입니다.<br/> <sec:authorize access="isRememberMe()">[TRUE]</sec:authorize><br/><br/>* 이 사용자는 사용자 아이디/비밀번호로 로그인 하고 있으면 [TRUE]입니다.<br/> <sec:authorize access="isFullyAuthenticated()">[TRUE]</sec:authorize><br/><br/><a href="/login/logout">[로그아웃]</a></div></body></html>성공적으로 로그인이 되고 이동되는 페이지이다.
스프링 시큐리티에서 제공하는 태그라이브러리로 현재 로그인 정보를 출력 한다.
이렇게 jsp까지 작성을 마치고 시큐리티 기본 연동은 끝났다.
마지막으로 샘플 소스는 아래의 깃허브 주소에서 확인 할 수 있다.
https://github.com/DevMoonKi/SpringBootSecuritySample
반응형'Spring Security' 카테고리의 다른 글
스프링 시큐리티 자동로그인 Remember-me 안될 때 해결방법 (0) 2023.11.05 스프링 시큐리티 중복로그인 안될 때 해결방법 (0) 2023.11.03 스프링부트 스프링시큐리티 연동하기(3) WebSecurityConfigurerAdapter/LoginController (0) 2019.06.23 스프링부트 스프링시큐리티 연동하기(2) UserDetailsService/AuthenticationProvider (0) 2019.06.21 스프링부트 스프링시큐리티 연동하기(1) Gradle/Mybatis/Oracle (0) 2019.06.15