728x90
반응형

SpringFramework/BASIC 38

Spring에서 정수형 Parameter의 타입인 int, Integer 사용 차이

Parameter값이 null 인 경우가 있다. 이때 컨트롤러에서 정수형 값으로 받는다고 가정한다면 int 타입은 null을 저장할 수 없기 때문에 오류가 발생한다. 따라서 null이 들어올 수 있는 상황에서는 Wrapper 형식인 Integer로 받는다. @GetMapping("/") public String list(int page, String condition, String keyword, SearchVO search, HttpServletRequest request, Model model, RedirectAttributes ra) {} 위와 같은 메서드로 코드가 짜여있을때 해당 URL이 https://u-it.tistory.com/ 라고 가정하고 접속을 한다면 메서드에서 자동으로 page라는 n..

[자동로그인]Interceptor 활용 자동로그인 ,로그아웃 구현 예제 로직 및 과정 vol.2

쿠키를 통해서 세션아이디와 일치하는, '자동로그인 했던 회원의 정보' 를 불러온 뒤 다시한번 세션에 저장해버리는 로직을 구현 하기위해, 불러온 회원 정보를 어딘가에 재활용 할수있도록 보관해야합니다. 바로 DB에 보관해야합니다. DB에 쿠키의 만료시간과 쿠키의 값을 함께 저장하겠습니다. sql을추가해서 컬럼을 2개 추가합니다. alter table mvc_user ADD session_id varchar(80) default 'none' not null; alter table mvc_user add limit_time date; 자동로그인 하지 않은사람은 default값으로 none이 저장 됩니다. 다음으로는 VO에는 DB에추가한 컬럼을 필드에 추가한 후 public class UserVO { /*이전필드..

[자동로그인]session&cookie 활용 자동로그인 구현 예제 로직 및 과정 vol.1

$("#signIn-btn").click(function() { //자동로그인 반환할 변수 const autoLogin = $('input[name=autoLogin]').is(":checked"); console.log("auto : "+autoLogin); const userInfo = { autoLogin : autoLogin }; $.ajax({ type: "POST", url: "/user/loginCheck", headers: { "Content-Type": "application/json" }, data: JSON.stringify(userInfo), dataType : "text", success: function(data) { } }); }); 체크박스에 접근하여 논리값을 리턴해보도록 합..

쿠키와세션,인터셉터를 활용한 자동로그인 개념 설명

자동로그인 브라우저창을 종료 하거나 세션의 유효시간이 만료가 된다면 세션내부의 로그인 데이터가 사라지게됩니다. 세션에는 고유 ID가 있는데 그것이 사라지고 새로 브라우저를 킨다면 새로운 고유 ID를 가진 세션객체가 생성됩니다. 이 상태로는 로그인 한 데이터가 없기 때문에 사용자가 재로그인 할 수밖에 없습니다. 네이버같은 경우 자동로그인 하지 않고 로그인했다가 브라우저를 껐다 키면 재로그인 해야하는 경험과 같습니다. 자동로그인 구현 자동로그인을 체크 했을때 클라이언트 측에서 서버로 자동로그인이 체크 되었다는 증거를 추가로 넘겨줍니다. 서버에서 해당 증거를 확인하게되면 자동로그인에 관한 처리를 수행합니다. 체크값에 대해서 체크가 되었다 안되었다 정도로 판단하면 되므로 논리값으로 처리하면 될것입니다. 체크가 ..

[ Interceptor ] 게시판 session 회원 권한 검증 실습 로직

public class BoardInterceptor extends HandlerInterceptorAdapter{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("게시판 인터셉터 발동!"); //BoardController쪽으로 들어갈 요청이 회원인지 아닌지 먼저 확인 HttpSession session = request.getSession(); if(session.getAttribute("login") == null) { System.out.println("회원 인증 실패!"); //re..

[Interceptor] 세션검증 공통코드 처리 정리 및 예시

Interceptor Interceptor는 Controller를매핑하기 전에 DispatcherServlet과 Controller 사이에 두는것이 Interceptor라는 장벽입니다. 우리가 BoardController라고 했을 때, BoardController의 어떠한 요청에 진입할때 Interceptor로 제한을 걸수 있게됩니다. 즉, Interceptor의 역할을 기능제한을 수행하는것 입니다. Interceptor의뜻인 중간에 탈취한다 는 뜻과 연관이있습니다. DispatcherServlet이 글쓰기요청을 받는다면 BoardController에서 일일히 글쓰기에대한 메서드, 글수정에대한 메서드, 글삭제에대한 메서드에서 세션검증에대한 코드를 각각 넣어줘야 할 텐데 공통적인 코드이므로 Intercep..

[Filter, Interceptor, AOP] 공통코드 처리

Filter, Interceptor, AOP 회원게시판 게시글쓰기, 게시글 수정하기, 삭제하기 등등 어떠한 작업에대한 권한및 정보 검증들을 session으로 처리한다고 할때 session검증이 필요한 상당히 많은부분에 동일한 코드들이 들어가야 합니다. 회원이 맞는지에 대한 권한을 로그인 유무를 기준으로 잡아 계속 세션을 확인하고, session에 id가없다면 계속 redirect로 로그인페이지로 돌려보내고 이러한 동일한 처리를 위해 사용하는것 중 하나가 Interceptor 입니다. 공통 코드들을 한번에 처리해주는 작업을 크게 3개지로 나눌수 있습니다. Filter, Interceptor, AOP 이 세가지 모두 공통소스에 대한 작업을 한번에 처리하기 위한 용도로 사용되는것 이며 각각 범위가 다릅니다. ..

[session] 로그인,비로그인,회원,비회원 에 따른 UI 차이

세션을 통한 브라우저 권한 설정과 UI변경 유효성검증 컨트롤러에서 public String login (HttpSession session){ session.setAttribute("login", user); } 위와같이 "login"이라는 이름으로 user정보를 세션객체에 담는다면 로그인이 처리되도록 구현되어 있습니다. 로그인 유무에 따라 UI를 각각 다르게 보여주기 위해서 LOGIN MYPAGE LOGOUT c:if 코어태그립의 if문을 통해 받은 session객체가 비어있지 않다면 보여주도록 설정합니다. ${SessionScope.login != null} 이때에는 sessionScope를 굳이 쓰지않아도 됩니다. [scope의 종류] 1. page 2. request 3. session 4. ap..

미완성 [RestAPI] REST컨트롤러에서 뷰리졸버나 redirect하는방법

REST방식의 RestController에서도 뷰리졸버를 통해 특정 뷰페이지로 이동하거나 리다이렉트 해야할 일이 생깁니다. 만약 메서드방식을 String타입의 메서드로 선언해준다면 JSON형식의 데이터가 return으로 넘어가기때문에 뷰리졸버도, redirect도 작동하지 않게됩니다. 쉽게 뷰리졸버 같은경우에는 void형식으로 메서드를 만들어 주면 됩니다. 하지만 redirect를 하기위해서는 생각을 좀 해봐야합니다. 이럴때 쓰이는것이 ModelAndView입니다. ModelAndView 타입으로 메서드를 선언하고, 해당 객체를 사용하면 redirect나 뷰리졸버를 사용할수 있게 되고 심지어 서버를 활용해 addObject로 파라미터로값도 따로 보낼수있게 되겠죠 다만,,,, 이렇게된다면 이 메서드에서는 ..

[session& cookie] 로그인 유지에 필요한 세션객체와 쿠키 정리

로그인에 성공을 했어도 변화가 없는 이유는 로그인햇을때 어떤 증거를 남기지 않았으며, UI적인 처리를 하지 않았기 때문입니다. 로그인이라는 기능 자체는 권한을 다르게주겠다는 것입니다. 회원과 비회원이라는 두가지 권한의 분리. 다시말해 회원이 할수있는일과 비회원이 할수있는 일을 구분해야합니다 회원 : 게시판 목록조회, 상세조회 , 자기글 수정 삭제 , 글쓰기 가능 비회원 : 목록조회 , 상세조회 이와같이 권한을 구분을 하려면 로그인한 사람에게 시스템적인 어떠한 증표를 줘야합니다. Http프로토콜 자체가 한번 응답이 끝나 버리면 데이터를 아무것도 유지하지 않습니다 ConnectionlessProtocol http라는 프로토콜이 응답을 끝내면 데이터를 유지하지않고 다 날려버리는 프로토콜 이기 때문에 그래서 지..

[ BCrypt ] Spring-security 비밀번호 암호화, 복호화 로직 활용

Spring-security 암호화 하기 위해서는 Spring-security에서 제공하는 클래스가 필요합니다. 스프링이 제공하는 spring-security모듈을 추가합니다. org.springframework.security spring-security-web ${org.springframework-version} Spring-security 라이브러리를 pom.xml에 추가하고 빌딩,업데이트를 완료합니다. BCryptPasswordEncoder 비밀번호 암호화 본격적으로 암호화를 하기 위해서는 Spring-security에서 제공하는 클래스가 필요합니다. BCryptPasswordEncoder 클래스입니다. BCryptPasswordEncoder encoder = new BCryptPasswordE..

[ SHA-256 해시코드 ] 비밀번호 암호화 로직

SHA-256의 로직이며 객체화 한 뒤, 복호화 하여 사용할때에는 MD5와 똑같이 암호화 과정을 한번 더 거친 뒤 비교하여 유효성 과정을 거쳐 사용하시면 되겠습니다. public static String EncBySha256(String data) throws Exception { String retVal = ""; try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(data.getBytes()); byte byteData[] = md.digest(); StringBuffer sb = new StringBuffer(); for(int i=0; i

[ MD5 해시코드 ] 비밀번호 암호화 로직 활용

MD5 해시코드 비밀번호 암호화 로직 -> 객체화 클래스 구현 로직 public class PwdChange{ public static String getPassWordToXEMD5String(String password) { MessageDigest md_Md5 = null; try { md_Md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { e.printStackTrace(); } String resultString; byte[] byteArr; String temp = ""; byteArr = md_Md5.digest(password.getBytes()); for (int i = 0; i < byteArr.length; i++) { re..

[DELETE] 요청 POST방식/ (GET방식 불가)

html의 하이퍼링크나 자바스크립트의 Location같은 겟방식의 요청으로는 데이터를 조작명령 요청을 취해서는 안됩니다. (delete, update) GET방식은 주소창에 파라미터값이 노출되므로 주소의 파라미터 값을 조작해서 임의로 글을 수정,삭제 되는 경우가 발생할수 있기 때문입니다. 삭제 만약 삭제요청이 이렇게 GET방식으로 들어가고 @GetMapping("/delete") public String delete(int boardNo,RedirectAttributes ra) { System.out.println("URL : /board/delete GETT "); ra.addFlashAttribute("boardNo",boardNo); return "redirect:/board/delete_ok"; ..