com.demo.domain에
loginUser 클래스 생성
package com.demo.domain;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;
//loginUser 객체를 세션에 등록한다.
@Component("loginUser")
@SessionScope
public class LoginUser {
private int user_idx;
private String user_name;
@Size(min=4, max=20)
@Pattern(regexp = "[a-zA-Z0-9]*")
private String user_id;
@Size(min=4, max=20)
@Pattern(regexp = "[a-zA-Z0-9]*")
private String user_pw;
private boolean userlogin; //로그인 상태 (로그인 시 체크함)
public LoginUser() {
this.userlogin = false;//객체 생성 시 처음 상태는 로그인 false다
}
//게터 세터 생성
public int getUser_idx() {
return user_idx;
}
public void setUser_idx(int user_idx) {
this.user_idx = user_idx;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getUser_id() {
return user_id;
}
public void setUser_id(String user_id) {
this.user_id = user_id;
}
public String getUser_pw() {
return user_pw;
}
public void setUser_pw(String user_pw) {
this.user_pw = user_pw;
}
public boolean isUserlogin() {
return userlogin;
}
public void setUserlogin(boolean userlogin) {
this.userlogin = userlogin;
}
}
bean 등록을 할 때
service는 sevice, controller는 controller
dao는 repository 이런식으로 등록함
인터셉터는 servlet-context에서
일반 클래스를 bean등록을 한다면 component로 하면됨
그래서 현재 UserVO객체를 loginUser라는 이름으로 세션에 등록함
@sessionScope
세션에 등록을 함(30분은 계속 유지가 됨)
login.jsp
form 라이브러리 불러옴
현재 있는 폼태그를 교체
<form:form action="${root }/user/login_pro" modelAttribute="loginUser">
<div class="form-group">
<form:label path="user_id">아이디</form:label>
<form:input path="user_id" class="form-control"/>
<form:errors path="user_id" style="color:coral" />
</div>
<div class="form-group">
<form:label path="user_pw">비밀번호</form:label>
<form:password path="user_pw" showPassword="true" class='form-control'/>
<form:errors path='user_pw' style='color:coral'/>
</div>
<div class="form-group text-right">
<form:button class='btn btn-primary'>로그인</form:button>
<a href="${root }/user/join" class="btn btn-danger">회원가입</a>
</div>
</form:form>
modelAtrribute는 컨트롤러에서 받아올거임
UserController
@GetMapping("/login") //@ModelAttribute 생략가능함
public String login( LoginUser loginUser) {
return "user/login";
}
실행하기
form form 라이브러리는 무조건 POST 로감
Usercontroller에 추가
@PostMapping("/login_pro")//@Valid사용 시 BindingResult 사용해야함 에러 있을 경우 처리
public String login_pro(@Valid LoginUser loginBean, BindingResult result) {
if(result.hasErrors()) {
return "user/login";
}
return "user/login_success";
}
LoginUser에 메세지 추가
//loginUser 객체를 세션에 등록한다.
@Component("loginUser")
@SessionScope
public class LoginUser {
private int user_idx;
private String user_name;
@Size(min=4, max=20, message = "아이디는 4-20까지 적어주세요")
@Pattern(regexp = "[a-zA-Z0-9]*",message = "영문 또는 숫자로 적어주세요")
private String user_id;
@Size(min=4, max=20,message = "패스워드는 4-20까지 적어주세요")
@Pattern(regexp = "[a-zA-Z0-9]*",message = "영문 또는 숫자로 적어주세요")
private String user_pw;
private boolean userlogin; //로그인 상태 (로그인 시 체크함)
public LoginUser() {
this.userlogin = false;//객체 생성 시 처음 상태는 로그인 false다
}
로그인 검사해야함
UserMapper.xml에서 추가
<select id="loginCheck" parameterType="com.demo.domain.LoginUser" resultType="com.demo.domain.LoginUser">
SELECT user_idx, name
FROM user
WHERE user_id=#{user_id} AND user_pw=#{user_pw}
</select>
UserDAO.
//로그인 체크
public LoginUser getLoginUserInfo(LoginUser loginUser) {
return sqlTemplate.selectOne("user.loginCheck", loginUser);
}
UserService
LoginUser 세션 이름 변경
pom.xml에 추가
<!-- annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
메이븐 업데이트
UserService
//로그인 체크
public void getLoginUserInfo(LoginUser loginUser) {
//DB에서 로그인 유저 정보를 가져옴 (id, pw를 입력)
LoginUser tempLoginUser = userDAO.getLoginUserInfo(loginUser);
//로그인 유저 정보가 있으면 그 정보를 sessionUser에 idx와 name을 저장하고 성공으로 저장
if(tempLoginUser != null) {
sessionUser.setUser_idx(tempLoginUser.getUser_idx());
sessionUser.setUser_name(tempLoginUser.getUser_name());
sessionUser.setUserlogin(true);//로그인 성공 시 상태 true
}
}
보안상 패스워드랑 아이디는 안가져옴
UserController
@PostMapping("/login_pro")//@Valid사용 시 BindingResult 사용해야함 에러 있을 경우 처리
public String login_pro(@Valid LoginUser loginBean, BindingResult result) {
if(result.hasErrors()) {
return "user/login";
}
//로그인 검사
uService.getLoginUserInfo(loginBean);
if(sessionUser.isUserlogin() == true) {
return "user/login_success";
}else {
return "user/login_fail";
}
}
login_fail jsp 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="root" value="${pageContext.request.contextPath}" />
<script>
alert('로그인에 실패하엿습니다')
location.href = '${root}/user/login'
</script>
component 인식을 위해서 domain도 추가해줘야함
로그인 실패 시 로그인 화면으로 돌아감
login.jsp
@GetMapping("/login") //@ModelAttribute 생략가능함
public String login( LoginUser loginUser,Model model,
@RequestParam(value = "fail",defaultValue = "false" )boolean fail) {
model.addAttribute("fail", fail);
return "user/login";
}
login_fail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="root" value="${pageContext.request.contextPath}" />
<script>
alert('로그인에 실패했습니다. id 또는 password가 틀립니다.')
location.href = '${root}/user/login?fail=true'
</script>
login_success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var="root" value="${pageContext.request.contextPath}" />
<script>
alert('로그인 되었습니다.')
location.href = '${root}/'
</script>
'BACKEND > Spring' 카테고리의 다른 글
게시판 만들기 2 - 정보 수정 페이지와 글쓰기,글상세보기 페이지는 로그인 시 이용가능함 (1) | 2023.10.30 |
---|---|
게시판 만들기 2 - 상단 화면에 로그인/로그아웃 표시 (0) | 2023.10.30 |
게시판 만들기 2 - 아이디 중복 검사 (0) | 2023.10.27 |
게시판 만들기 2 - 유효성 검사 (0) | 2023.10.27 |
게시판 만들기 2- VO생성 및 MyBatis 설정 , 인터셉터 설정 (0) | 2023.10.26 |