20240221 스프링(로그인-글쓰기 버튼, 댓글쓰기, 수정,삭제, ip)

2024. 2. 21. 16:182023.11.21-2024.05.31

	// 글쓰기 2024-02-16, 2024.02.21 
	 @PostMapping("/write") // 내용, 제목 받아서 -> db 저장 -> 보드로 이동
//   public String write(@Param("title") String title, @Param("content") String content) {
   // 02.20 로그인관련 request 추가
   public String write(WriteDTO dto) {
		 //로그인 검사하기
     // System.out.println(dto.getTitle());
     // System.out.println(dto.getContent());
      if(util.getSession().getAttribute("mid") != null) {
    	  int result = boardService.write(dto);
    	  if(result == 1) {
    		  return "redirect:/detail?no="+dto.getBoard_no();
    	  } else {
    		  return "redirect:/error";
    	  
      }
      
      } else {
    	  return "redirect:/login";
      }
      
   }

 

 

// 댓글쓰기 2024.02.19 psd == 글번호 no, 댓글내용 comment, 글쓴이, 2024.02.21 
	 // 2024-02-20 session 추가
     @PostMapping("/commentWrite")
     public String commentWrite(CommentDTO comment) {
        if(util.getSession().getAttribute("mid") != null) {
           int result = boardService.commentWrite(comment); 
           return "redirect:/detail?no="+comment.getNo();
        } else {
           return "redirect:/detail?no="+comment.getNo(); 
     }

 

 

	@GetMapping("/write")
	public String write() {
		return "redirect:/login?error=2048";
	}

 

 

login.jsp

    파마미터로 오는  error가 있다면 에러 화면에 출력하기
    ${param.error }
    </body>

 

 body 닫는 태그 위에 적어주기, 위에 스위티 얼랏 스크립트 붙여넣기 

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

    파라미터로 오는  error가 있다면 에러 화면에 출력하기
   <c:if test=" ${param.error ne null}">
		<script type="text/javascript">
			Swal.fire("Oops!", "잘못된 접근입니다." , "warning");			
		</script>

   </c:if>
    </body>

 

로그인 컨트롤러

	      //세션만들기
	      HttpSession session = request.getSession();
	      session.setAttribute("mid", id);
	      session.setAttribute("mname", login.getMname());
	      return "redirect:/index";
      } else { 
    	  //잘못된 로그인일 경우 로그인 창으로 이동하기 = 5번 시도했으면 잠그기.
    	  return "redirect:/login?login=1024";
      }

 

<c:if> 추가

<c:if test="${parm.login ne null }">
   	<script type="text/javascript">
   		Swal.fire("로그인 할 수 없습니다.", "올바른 아이디와 비밀번호를 입력하세요.", "error");
   		</script>
   </c:if>
  </body>

 

로그인 안했을때 글쓰기 버튼 안보인다.

 

데이터베이스에 mcount 추가

 

LoginController.java

} else { 
    	  //잘못된 로그인일 경우 로그인 창으로 이동하기 = 5번 시도했으면 잠그기.
    	  //해당 id의 mcount를 +1시키기
    	  loginService.mcountUp(loginDTO);
    	  //서비스-DAO-매퍼로 가면된다.
    	  return "redirect:/login?login=1024";
      }

 

 

loginService.java>mcountUp

	public void mcountUp(LoginDTO loginDTO) {
		loginDAO.mcountUp(loginDTO);
		
	}

 

 

LoginDAO>mcountUp

	public void mcountUp(LoginDTO loginDTO) {
		sqlSession.update("login.mcountUp", loginDTO);
		
	}

 

login-mapper

  	<update id="mcountUp" parameterType="loginDTO">
  		UPDATE member SET mcount=mcount+1 WHERE mid=#{id}
  	
  	</update>

 

LoginDTO > mcount 추가

package org.mask.dto;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class LoginDTO {
	
	private int count, mcount;
	private String id, pw, mname;

}

 

 

로그인 안될때 못하게 하기 (왜....진짜왜.....퉷)

                    

login-mapper.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="login">

	<select id="login" parameterType="loginDTO" resultType="loginDTO">
	<![CDATA[
		SELECT COUNT(*) as count, mname, mcount, mpw as pw
		FROM member
		WHERE mid=#{id} AND mgrade > 4
	]]>
	</select>
	
	<update id="mcountUp" parameterType="loginDTO">
		UPDATE member SET mcount=mcount+1 WHERE mid=#{id}
	</update>
	
</mapper>

                                                                                                                                                                                                 

 

loginController>login 수정                                                                                                                                                                           

	 @PostMapping("/login")
	   public String login(HttpServletRequest request) {
	      String id = request.getParameter("id");
	      String pw = request.getParameter("pw");
//	      System.out.println("id: "+id+" / pw : "+pw);
	      
	      LoginDTO loginDTO = new LoginDTO();
	      loginDTO.setId(id);
	      loginDTO.setPw(pw);
	      
	      LoginDTO login = loginService.login(loginDTO);
			if(login.getCount() == 1 && login.getMcount() < 5) {
				if(login.getPw().equals(loginDTO.getPw())) {//비밀번호 비교
					//세션만들기
					HttpSession session = request.getSession();
					session.setAttribute("mid", id);
					session.setAttribute("mname", login.getMname());
					//해당 id의 mcount를 0으로 만들기
					return "redirect:/index";				
				} else {
					//mcountUP
					loginService.mcountUp(loginDTO);
					return "redirect:/login?count="+login.getMcount();
				}
			} else if(login.getMcount() < 5){ 
				return "redirect:/login?count="+login.getMcount();
			} else {
				//잘못된 로그인일 경우 로그인 창으로 이동하기 = 5번 시도했으면 잠그기.
				//해당 id의 mcount를 +1시키기
				loginService.mcountUp(loginDTO);
				return "redirect:/login?login=1024";
			}
			
		}

                     

LoginDTO 수정     

package org.mask.dto;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class LoginDTO {
	
	private int count, mcount;
	private String id, pw, mname;

}