728x90
반응형
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- /WEB-INF/view/user/login.jsp --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html><html><head><meta charset="UTF-8">
<title>로그인화면</title>
<script type="text/javascript">
function win_open(page) {
var op = "width=500, height=350, left=50,top=150";
open(page,"",op);
}
</script>
</head><body>
<h2>사용자 로그인</h2>
<form:form modelAttribute="user" method="post" action="login" name="loginform">
<input type="hidden" name="username" value="유효성검증을위한 파라미터" >
<input type="hidden" name="email" value="valid@aaa.bbb" >
<spring:hasBindErrors name="user">
<font color="red"><c:forEach items="${errors.globalErrors}" var="error">
<spring:message code="${error.code}" />
</c:forEach></font></spring:hasBindErrors>
<table border="1" style="border-collapse: collapse;">
<tr height="40px"><td>아이디</td><td><form:input path="userid" />
<font color="red"><form:errors path="userid" /></font></td></tr>
<tr height="40px"><td>비밀번호</td><td><form:password path="password" />
<font color="red"><form:errors path="password" /></font></td></tr>
<tr height="40px"><td colspan="2" align="center">
<input type="submit" value="로그인">
<input type="button" value="회원가입" onclick="location.href='userEntry'">
<input type="button" value="아이디찾기" onclick="win_open('idsearch')">
<input type="button" value="비밀번호찾기" onclick="win_open('pwsearch')">
</td></tr></table>
</form:form></body></html>
main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 페이지</title>
</head>
<body>
<h2>환영합니다. ${sessionScope.loginUser.username}님</h2>
<a href="mypage?id=${loginUser.userid}">mypage</a><br>
<a href="logout">로그아웃</a>
</body>
</html>
UserLoginAspect.java
package aop;
import javax.servlet.http.HttpSession;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import exception.LoginException;
import logic.User;
@Component //객체화.
@Aspect //AOP 기능 객체.
public class UserLoginAspect {
/*
* Pointcut : 핵심메서드를 선택 방식 결정 =>
* execution(* controller.User*.loginCheck*(..)) && args(..,session):
* * controller.User* : controller패키지의 클래스 중 이름이 User로 시작하는 모든 클래스
* loginCheck*(..) : 메서드 중 이름이 loginCheck로 시작하는 모든 메서드
* args(..,session) : 메서드의 매개변수의 자료형이 session인 메서드
*
* .. : 갯수에 상관없음
*
* Advice : aop메서드의 실행 시점 설정
* @Around : Pointcut 메서드의 호출 전 userLoginCheck 메서드 먼저 호출
* 핵심 메서드 실행 전, 후에 aop 메서드의 실행
* @Before : 핵심 메서드 실행 전 aop 메서드의 실행
* @AfterRetuning : 핵심 메서드 정상 종료 후 aop 메서드의 실행
*
*/
@Around("execution(* controller.User*.loginCheck*(..)) && args(..,session)")
public Object userLoginCheck(ProceedingJoinPoint joinPoint, HttpSession session) throws Throwable {
//joinpoPoint : 실행되는 메서드들의 순서 관리하는 객체
//session : 핵심 메서드의 매개변수 중 session 객체
User loginUser = (User)session.getAttribute("loginUser");
if(loginUser == null) { //로그인이 안된 상태
throw new LoginException("[userlogin]로그인 후 거래하세요", "login");
}
return joinPoint.proceed(); //다음 메서드 호출
}
@Around("execution(* controller.User*.idCheck*(..)) && args(..,id,session)")
public Object useridCheck(ProceedingJoinPoint joinPoint, String id, HttpSession session) throws Throwable {
User loginUser = (User)session.getAttribute("loginUser");
if(loginUser == null) { //로그인이 안된 상태
throw new LoginException("[idChenk]로그인 후 거래하세요", "login");
} else if (!loginUser.getUserid().equals(id) && !loginUser.getUserid().equals("admin")) {
throw new LoginException("[idChenk]본인 정보만 거래 가능합니다.", "main");
}
return joinPoint.proceed(); //다음 메서드 호출
}
}
LoginException.java
package exception;
public class LoginException extends RuntimeException {
private String url;
public LoginException(String msg, String url) {
super(msg);
this.url = url;
}
public String getUrl() {
return url;
}
}
exception.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true" %>
<%-- /springmvc1/src/main/webapp/WEB-INF/view/exception.jsp --%>
<%--
isErrorPage="true" : 현재 페이지가 예외 페이지.
=> exception(LoginException 객체) 내장 객체 전달.
--%>
<script>
alert("${exception.message}")
location.href="${exception.url}"
</script>
message.properties
## src/main/resources/messages.txt => src/main/resources/messages.properties \uBCC0\uACBD
error.login.password=\uBE44\uBC00\uBC88\uD638\uB97C \uD655\uC778\uD558\uC138\uC694.
error.input.user=\uD68C\uC6D0\uAC00\uC785 \uC785\uB825\uD56D\uBAA9\uC744 \uD655\uC778\uD558\uC138\uC694
error.input.login=\uB85C\uADF8\uC778 \uC785\uB825\uD56D\uBAA9\uC744 \uD655\uC778\uD558\uC138\uC694
typeMismatch.birthday=\uC0DD\uB144\uC6D4\uC77C\uC740 YYYY-MM-DD \uD615\uC2DD\uC73C\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694
error.duplicate.user=\uC911\uBCF5\uB41C \uC544\uC774\uB514 \uC785\uB2C8\uB2E4.
error.login.password=\uBE44\uBC00\uBC88\uD638 \uC624\uB958 \uC785\uB2C8\uB2E4.
error.login.id=\uC544\uC774\uB514\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
error.userid.search=\uC544\uC774\uB514\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
error.password.search=\uBE44\uBC00\uBC88\uD638\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
error.required.userid=\uC544\uC774\uB514\uB97C \uC785\uB825\uD558\uC138\uC694
error.required.email=EMAIL\uC744 \uC785\uB825\uD558\uC138\uC694
error.required.phoneno=\uC804\uD654\uBC88\uD638\uB97C \uC785\uB825\uD558\uC138\uC694
728x90
반응형