전체 글
![[스프링]비밀번호 찾기 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOmxCq%2FbtrfPhl0j5p%2F23pzoGs5DKkNas1byklHpk%2Fimg.png)
[스프링]비밀번호 찾기 구현
이번엔 아이디/비밀번호 찾기를 구현했다. 아이디는 간단하게 이메일로만 찾을 수 있도록 구현했고, 비밀번호는 전에 작성한 회원가입 글에서 만들어놓은 메일 , 난수 클래스를 이용해서 간단하게 구현했다. 아이디와 메일을 입력하면 임시비밀번호가 발급되도록 구현했다. (암호화 적용) mapper.xml update MP_MEMBER set MEMBER_PW = #{memberPw} where MEMBER_EMAIL = #{memberEmail} and MEMBER_ID = #{memberId} select count(*) from MP_MEMBER where MEMBER_EMAIL = #{memberEmail} and MEMBER_ID = #{memberId} 일단 저번 글의 아이디찾기 유효성 검사는 동일하다. ..
![[스프링] 아이디찾기 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpVABA%2FbtrfREgs0ck%2Foc6Hk6sOrFMzMJxYGL6rwk%2Fimg.png)
[스프링] 아이디찾기 구현
이번엔 아이디/비밀번호 찾기를 구현했다. 아이디는 간단하게 이메일로만 찾을 수 있도록 구현했고, 비밀번호는 전 게시글에서 만들어놓은 메일 , 난수 클래스를 이용해서 간단하게 구현했다. 아이디와 메일을 입력하면 임시비밀번호가 발급되도록 구현했다. (암호화 적용) Mapper.xml select * from MP_MEMBER where MEMBER_EMAIL = #{memberEmail} select count(*) from MP_MEMBER where MEMBER_Email = #{memberEmail} 간단하다. IdCheck는 유효성 검사를 위해 작성한 쿼리인데, 입력한 이메일의 수를 카운트해서 0이 나오면 팝업창을 출력하게 로직을 짯다. findId는 select Id만해도 되지만 다른 쓸데가 있을까..
![[스프링]회원가입 이메일인증 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyobh3%2FbtrfptHMw3J%2FEnWLVqdsqI1FqKGajflobK%2Fimg.png)
[스프링]회원가입 이메일인증 구현
이번엔 회원가입 시 ,이메일 인증을 구현했다. 메일로 인증번호를 받아서 인증번호를 입력 후 인증하는 방법과 메일에서 바로 버튼을 눌러서 인증을 하는 방법을 생각했는데, 사용자가 느끼기엔 버튼을 눌러서 인증하는 방법이 편할 것 같아서 후자의 방법으로 구현했다. 다음 프로젝트땐 전자의 방법으로 구현 할 생각이다. 크게 다르지 않다. pom.xml에 메일 라이브러리를 추가 javax.mail mail 1.4.7 org.springframework spring-context-support ${org.springframework-version} MailUtils.java 생성 public class MailUtils { private JavaMailSender mailSender; private MimeMessa..
![[스프링] 자동로그인 기능 구현 - 로그인4](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmlXep%2FbtrfjW22TcR%2FpytuRP8ERPGdY7RZlyT9ok%2Fimg.png)
[스프링] 자동로그인 기능 구현 - 로그인4
먼저, 로그인 화면에 로그인유지 체크박스를 만들었다. 로그인유지 로그인 인터셉터의 postHandle 부분 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { logger.info("interceptor postHandel"); HttpSession httpSession = request.getSession(); ModelMap modelMap = modelAndView.getModelMap(); Object memberVO = modelMap.get("member"); if (memb..
![[스프링]로그인 권한설정과(인터셉터) 로그인,로그아웃 전 페이지 기억 기능 - 로그인 3](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXFYwP%2Fbtrfc7L7zpM%2FmPeSOOrh1R7JvzdeQoN6z0%2Fimg.png)
[스프링]로그인 권한설정과(인터셉터) 로그인,로그아웃 전 페이지 기억 기능 - 로그인 3
저번글에서, 로그인처리까지 완료했으니 이번엔 로그인 후, 권한에 따라 기능을 제한하고 나눠볼 예정이다. 로그인구현 첫번째 글에서 설명했듯이,인터셉터를 이용한 로그인 방식을 구현했다. 그래서 인터셉터를 이용해서 로그인 시, 글작성, 글수정과같은 기능을 제한 , 로그인 페이지로 넘어가게 만들고 이동 전 페이지를 기억해서 원래의 페이지로 돌아가도록 기능을 구현 할 예정이다. 먼저 kr.co.commons.interceptor 패키지에 AuthInterceptor 클래스를 만든다. public class AuthInterceptor extends HandlerInterceptorAdapter{ private static final Logger logger = LoggerFactory.getLogger(AuthI..
![[스프링]인터셉터를 활용한 로그인구현 (세션부여) - 로그인2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfKnLt%2Fbtre33CQrqj%2FXNOJgJtxTKp2wNpht4Azzk%2Fimg.png)
[스프링]인터셉터를 활용한 로그인구현 (세션부여) - 로그인2
이번엔 로그인처리를 해보려고 한다. 로그인기능은 클라이언트가 아이디와 비밀번호를 입력하면, 아이디와 비밀번호가 맞는지 확인하고, 맞다면 세션쿠키를 부여해서 그 회원의 권한에 맞게 뷰페이지나 글작성 ,관리자페이지 등을 들어갈 수 있고, 조작할 수 있게 구분해주는 작업이라고 할 수 있겠다. 이번엔 아이디와 비밀번호가 맞는지 확인하고, 세션쿠키를 부여하는데 까지 해보려고 한다. [스프링] Session과 Cookie , HttpSession :: 간편 웹프로그래밍 (tistory.com) [스프링] Session과 Cookie , HttpSession session이란? 세션과 쿠키를 사용하는 이유는 HTTP프로토콜의 특징이자 약점을 보완하기 위해서다. HTTP프로토콜은 비연결지향, 무상태 프로토콜이다. 클라..
[스프링] Session과 Cookie , HttpSession
session이란? 세션과 쿠키를 사용하는 이유는 HTTP프로토콜의 특징이자 약점을 보완하기 위해서다. HTTP프로토콜은 비연결지향, 무상태 프로토콜이다. 클라이언트가 서버에 요청했을때 응답을 보낸 후 연결을 끊는 처리방식을 가지고 있고, 데이터를 유지하지 않는다. 하지만 로그인이나, 장바구니에 상품을 담아놓거나하는 경우에는 데이터 유지가 필요하다. 이 경우를 위해 쿠키와 세션을 사용한다. 먼저 세션과 쿠키의 가장 큰 차이점은 정보가 어디에 저장되느냐이다. 쿠키는 클라이언트(로컬)에 저장되고, 세션은 서버에 저장된다. 만료시점은 별도로 지정이 가능하고, 쿠키는 로컬에 저장되어 보안상 위험이 있기 때문에 요즘은 잘 사용하지 않는다고 한다.( 로그인유지 기능 등을 제외하고) 쿠키는 로컬에 저장되기 때문에 속..
![[스프링]회원가입(ajax 유효성 검사,비밀번호 암호화) - 로그인1](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwkM9Z%2FbtreTHMmsJ5%2FH9KEnbRtiOPDQs82DQNMp1%2Fimg.png)
[스프링]회원가입(ajax 유효성 검사,비밀번호 암호화) - 로그인1
내가 생각하고 있던 로그인 방법은 1. controller에서 HttpSession 인터페이스를 이용해서 직접 세션값을 구현 2.인터셉터를 이용해서 세션값을 확인하는 방법으로 구현. 3.spring 시큐리티를 이용해서 필터로 로그인처리를 구현하고, 보안까지 잡는 방법이다. 원래는 스프링시큐리티를 이용해서 이번 프로젝트를 해보려고했는데 반나절정도 시간을 들여서 공부하고나니 음.. 할 수는 있겠지만 조금 헤맬거같은 느낌이 확 들길래 좀 더 숙련도를 쌓고 로직에 대한 이해를 하고 다음에 스프링부트로 프로젝트를 만들때, 스프링 시큐리티를 활용하기로 했다. 그래서 2번, 인터셉터를 이용해서 로그인을 구현해보려고 한다.. 중복체크나 이메일인증을 하다가 입력한 정보가 다 날아가버리면 웹사이트를 닫고 욕하며 나가버리는..
![[스프링]HTTP프로토콜과 URI를 통한 요청](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4g5mN%2FbtreqJ5Gey1%2F3wQ923q2OppoPSvSjlMAR1%2Fimg.png)
[스프링]HTTP프로토콜과 URI를 통한 요청
스프링을 이용해서 개발을 하던 중, 검색이나 정렬등 여러 기능을 사용해서 웹페이지의 내용들을 표시할때, 왜 ? UriComponents와 같은 라이브러리를 사용해서 uri를 만들고 왜 ? 그 조합되어 웹페이지의 주소창에 표시되는 uri에 따라 표시되는 내용이 달라지는지 왜 ? 브라우저 주소창의 URI에 임의로 값을 넣으면 서버단의 결과값을 바꿀 수 있는지 궁금해졌다. bgno(게시판카테고리구분), page(현재페이지), perPageNum(페이지에 표시 할 게시글 개수), searchType(검색타입) , keyword(검색어), sort(최신순,댓글순 등 정렬) 이다. 게시글 목록을 출력로직인 /board/list라는 컨트롤러 매핑 주소값에 대응되는 쿼리(게시글목록)의 where문에 들어가는 내용들이다..
![[스프링]게시판 조회수,댓글수 순 정렬과 게시글 10개,20개씩 보기 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIcrDU%2FbtrehBftpWV%2F5SeIwG1GRLz6xlfivJjBJK%2Fimg.png)
[스프링]게시판 조회수,댓글수 순 정렬과 게시글 10개,20개씩 보기 구현
오늘은 게시판 게시글을 조회수와 댓글수, 최신순으로 정렬기능을 구현하고, 게시글을 10개, 20개, 30개씩 볼 수 있는 기능도 같이 만들어봤다. 이 기능을 어떻게 구현해야할지 생각하던 중, OKKY 사이트의 구현되있는 버튼을 눌러보다가 방법을 찾았다. 이런식으로 게시글 정렬이 url에 따라 변경되고, 이렇게 url이 바뀌면서, 결국 검색,페이징기능과 비슷한 로직이라는 것을 알았다. 먼저 게시글목록을 select하는 쿼리의 정렬부분을 바꿔줘야 한다. 전에 게시글의 댓글수를 목록페이지에서 출력하고, 조회수를 출력하는 부분을 구현할때 댓글수와 조회수를 count하는 로직은 이미 만들어뒀기 때문에 그 부분은 넘어가도록 하겠다. SELECT BNO, TITLE, CONTENT, WRITER, REGDATE, H..