1. dto 패키지 생성후 UserDto.java 생성
package com.tnqls.spring.dto;
import com.tnqls.spring.domain.User;
public class UserDto {
private String userid;
private String password;
public static class LoginInfo {
private String userid;
private String password;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
}
※ DTO (Data Transfer Object) 계층간 데이터 교환을 위한 객체. 도메인 객체에서 불필요한 속성들을 빼고싶을때 사용.
2. userService.java에 내용 추가
public User loginCheck(UserDto.LoginInfo userdto) {
User user = userMapper.getUserById(userdto.getUserid());
if(userdto.getPassword().equals(user.getPassword())) {
return user;
}
else {
return null;
}
}
3. HomeController.java 수정
// 로그인 화면(GET)
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "login";
}
// 로그인(POST)
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String postlogin(HttpSession session, UserDto.LoginInfo user, Model model) {
if(session.getAttribute("login") != null) {
session.removeAttribute("login");
}
User loginuser = userService.loginCheck(user);
if(loginuser!=null) { // 성공
session.setAttribute("login",loginuser);
logger.info("success login");
return "redirect:/main";
} // 실패
logger.info("fail login");
return "redirect:/login";
}
// 로그아웃
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {
session.invalidate();
logger.info("ByeBye Logout success");
return "redirect:/";
}
// 메인화면
@RequestMapping(value = "/main", method = RequestMethod.GET)
public String main() {
return "main";
}
※ session에 login이라는 attribute를 만들어서 로그인 체크
4. login.jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>
로그인
</h1>
<p><a href="/board">Home</a></p>
<form action="" method="post">
<p>
<label for="userid">아이디</label>
<input type="text" id="userid" name="userid" required="required"/>
</P>
<p>
<label for="password">비밀번호</label>
<input class="input-pwd" type="password" id="pwd1" name="password" required="required"/>
</P>
<button type="submit" id="submit">로그인하기</button>
<p><a href="/board/signup">회원가입하러가기</a></p>
</form>
</body>
</html>
5. main.jsp 생성
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="true" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>Main</title>
</head>
<body>
<h1>
게시판
</h1>
<P> 안녕하세요 ${login.userid}님 </P>
<input type="button" name="Logout" value="로그아웃" onclick="location.href='logout'">
</body>
</html>
※ 위에 session="true"로 해주어야 session값 사용 가능
로그인 안했을 때 로그인 요청하는 기능 만들기
6. interceptor패키지를 만들고 AuthInterceptor.java 생성
package com.tnqls.spring.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class AuthInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(AuthInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession httpSession = request.getSession();
if(httpSession.getAttribute("login")==null) {
logger.info("current user is not logged");
response.sendRedirect("/board/login");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
super.postHandle(request, response, handler, modelAndView);
}
}
※ Interceptor - 컨트롤러의 HttpRequest와 HttpResponse를 가로채는 역할
preHandle : 컨트롤러가 호출되기 전에 실행되는 메서드
postHandle: 컨트롤러 메서트 처리 끝난후 return되고 화면을 띄워주는 처리가 되기 직전에 수행
afterCompletion: 컨트롤러가 수행되고 화면처리까지 끝나고 호출
7. servlet-context.xml에 내용 추가
<beans:bean id="AuthInterceptor" class="com.tnqls.spring.interceptor.AuthInterceptor"/>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/main"/>
<beans:ref bean="AuthInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
※ 포함시키고 싶은 곳은 mapping
전체다 mapping path= "/**"하고 포함시키지 않고 싶은 곳은 exclude-mapping 으로 설정
'개발 > Spring' 카테고리의 다른 글
[Spring/게시판] 3.1 회원가입 추가기능 (0) | 2020.04.25 |
---|---|
[Spring/게시판] 3. 회원가입하기 (0) | 2020.04.23 |
[Spring/게시판] 2. Mybatis 연동하기 (0) | 2020.04.23 |
[Spring/게시판] 1. MySql 연동 (0) | 2020.04.23 |
최근댓글