본문 바로가기

백/spring

스프링 시큐리티 2- ng처리

어제에 이어서 스프링 시큐리티

이번엔 로그인 실패시 form에서 메시지가 뜨게 해보자,

로그인 실패시 메시지가 뜬다!
securituy context

 <security:form-login> 요소에서 authentication-failure-url 속성은 /loginForm.html?ng=987로 설정,

=> 인증 실패 시 사용자를 다시 로그인 페이지로 리다이렉트하며, 쿼리 파라미터 ng=987를 함께 전달

loginform.html

 ${param.ng}는 서버로부터 전달받은 ng라는 이름의 파라미터 값

 

loginform c태그 써야하니까 당연 태그리브 추가!

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

 

이제 프로젝트 5번 만들자(원래 4번에 저 테스트 했어야하는데 잘못만들엇음...)

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" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	login.jsp 입니다.
<!-- 	pagecontext.request.userPrincipal : 요청한 사용자 객체 정보 -->
	<c:if test="${not empty pageContext.request.userPrincipal}">
		<p>is Log-in</p>
	</c:if>
	<c:if test="${empty pageContext.request.userPrincipal}">
		<p>is Log-Out</p>
	</c:if>
<!-- 	pagecontext.request.userPrincipal.name :사용자 아이디 -->
	USER ID: ${pageContext.request.userPrincipal.name}<br>
<!-- 	pagecontext.request.contextPath : 프로젝트 경로 -->
<!-- 	j_spring_security_logout : spring security 에서 제공하는 로그아웃 =>homeController / 로 이동 -->
	<a href="${pageContext.request.contextPath}/j_spring_security_logout">Log Out</a>
</body>
</html>

로그인 해보면?

이런 창이 뜹니다..

user id 값(${pageContext.request.userPrincipal.name})을 받아오고 , logout링크를 누르면

j_spring_security_logout : spring security 에서 제공하는 로그아웃 =>homeController로 이동한다

 

프로젝트 6!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- 보안 taglib -->
<!-- pom.xml의 dependency에 있는 spring-security-taglibs 추가되어야 사용가능 -->
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	login.jsp 입니다.
<!-- 	pagecontext.request.userPrincipal : 요청한 사용자 객체 정보 -->
<%-- 	<c:if test="${not empty pageContext.request.userPrincipal}"> --%>
<!-- 		<p>is Log-in</p> -->
<%-- 	</c:if> --%>
<%-- 	<c:if test="${empty pageContext.request.userPrincipal}"> --%>
<!-- 		<p>is Log-Out</p> -->
<%-- 	</c:if> --%>
		<s:authorize ifAnyGranted="ROLE_USER">
			<p>is log-in</p>
		</s:authorize>
		<s:authorize ifNotGranted="ROLE_USER">
			<p>is log-Out</p>
		</s:authorize>
	
	
<!-- 	pagecontext.request.userPrincipal.name :사용자 아이디 -->
<%-- 	USER ID: ${pageContext.request.userPrincipal.name}<br> --%>
	USER ID: <s:authentication property="name"/><br>
<!-- 	pagecontext.request.contextPath : 프로젝트 경로 -->
<!-- 	j_spring_security_logout : spring security 에서 제공하는 로그아웃 =>homeController / 로 이동 -->
	<a href="${pageContext.request.contextPath}/j_spring_security_logout">Log Out</a>
</body>
</html>

login.jsp를 저렇게 바꾸면

뭐 전에거랑 아무 차이없다. 역할이 똑같음

 

pom.xml에서 

이 태그를 주석처리하고 다시 해본다면?

taglib가 사용 불가능해져 오류 발생/