* 스프링의 보안 기능을 이용한 로그인 및 페이지 접근
1. pom.xml 에 보안관련 정보를 추가한다.
<!-- 보안관련 정보 추가 -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
2. web.xml 에 보안 설정 파일 관련 정보를 추가한다.
- 새로운 보안 관련 xml 파일을 추가할 경우 우선 해당 경로에 xml을 추가한 후 그에 대한 정보를 web.xml의 해당 위치에 다음과 같이 추가한다.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/appServlet/security-context.xml
</param-value>
</context-param>
- 보안 관련 필터 처리도 web.xml에서 다음과 같이 수행한다.
- /* 으로 모든 접근에 대해 필터 처리를 수행한다.
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. security-context.xml에 파일에 사이트 접근에 대한 정보와 사용자 정보를 추가한다.
- 접근되는 경로에 따라 접근 권한 설정
- 로그인 페이지 등록 및 실패할 경우 이동할 페이지 등록
<security:http auto-config="true">
<security:form-login login-page="/loginForm"
authentication-failure-url="/loginForm?ng"/>
<security:intercept-url pattern="/test/*" access="ROLE_USER"/>
<security:intercept-url pattern="/welcome*" access="ROLE_ADMIN"/>
</security:http>
- 사용자별로 권한 설정
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="user" password="123" authorities="ROLE_USER"/>
<security:user name="admin" password="123" authorities="ROLE_ADMIN,ROLE_USER"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
4. 로그인 폼 페이지 작성
<%@ 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>
<h1>LoginForm.jsp</h1>
<!-- 1. action에 경로 추가하기 전에 taglib 추가 후 c:url로 경로 설정 -->
<!-- j_ 형태의 정해진 명칭 사용해야 함!! -->
<form action="<c:url value="j_spring_security_check" />" method="post">
ID : <input type="text" name="j_username"><br/>
PW : <input type="text" name="j_password"><br/>
<input type="submit" value="LOGIN">
</form>
<!-- 2. action에 경로 추가하기 전에 taglib 추가 후 c:url로 경로 설정 -->
<c:url value="j_spring_security_check" var="loginUrl"/>
<form action="${loginUrl}" method="post">
<c:if test="${param.ng != null}">
<p>
Login 실패!<br/>
<c:if test="${SPRING_SECURITY_LAST_EXCEPTION != NULL}">
message : <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" />
</c:if>
</p>
</c:if>
ID : <input type="text" name="j_username"><br/>
PW : <input type="text" name="j_password"><br/>
<input type="submit" value="로그인">
</form>
</body>
</html>
5. 로그인 확인 페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- 1.보안 태그를 이용하여 추가 부분 -->
<%@ 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>
<h1>login.jsp</h1>
<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>
<a href="list">목록보기</a>
<p></p>
USER ID : ${pageContext.request.userPrincipal.name }<br/>
<!-- 2.보안 태그를 이용하여 추가 부분 -->
<%-- USER ID : <s:authentication property="name"/><br/> --%>
<a href="${pageContext.request.contextPath}/j_spring_security_logout" >Log Out</a>
<!-- 위 코드는 디폴트(index.jsp) 페이지로 이동 -->
</body>
</html>
첫댓글 잘보고 갑니다.
예. 열심히 하세요^^