728x90
반응형

분류 전체보기 477

[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..

[jQuery&JavaScript] keyup() 메서드를 통한 id중복 검사, 입력창 공백 에 따른 태그생성 비동기식 이벤트 처리구현

SELECT COUNT(*) FROM mvc_user where account=#{account} priamrykey인 아이디를 기준으로 조회했을대 count를세어서 1이나오면 DB에 저장되어 있으므로 이미 가입된 아이디 아이디고 만약 0이 라면(primarykey이기때문에 1이상이 나오지않음) DB에 저장이 안됬으므로 사용가능한 아이디라는 유효성 검증 기준을 내릴수 있습니다. @RestController @RequestMapping("/user") public class UserController { @PostMapping("/checkId") public String checkId(@RequestBody String account) { System.out.println("/user/checkId: P..

[미완성]jQuery의 AJax를 통한 RestAPI JSON데이터 통신

클라이언트 영역 JSP단 JavaScript단 AJax() 통신처리 jQuery와 JavaScript문법을 통해 클릭시 이벤트를 발생시킵니다. 클릭을 했을때 이벤트 내용으로는 입력받은 아이디와 비밀번호, 이름을 자바스크립트 객체에 담고 ajax()함수를 통해 담은 데이터 정보인 객체를 서버 컨트롤러에게 전송을 합니다. 이때 전송방식과 요청정보, 전송할 데이터형식, 서버로부터 받을 응답데이터형식, 그리고 통신성공시 성공되었다는 내용을 받는 성공 콜백함수, 에러콜백함수 등을 지정해줘야합니다. 이때, 코드상에서 const user 라는 이름의 자바스크립트 객체 변수에 담긴 key값이 VO와 일치하게 넘겨줘야 컨트롤러단에서 객체로 묶어 받을 수 있게됩니다. 앞서 Map과 객체는 JSON데이터형식에서 {"key"..

[ REST API] REST클라이언트 프로그램을 통한 (클라이언트 → 서버) JSON형태 전송 ' @ResponseBody '

클라이언트 에서 서버에게 JSON데이터 형태로 데이터전송하기. REST방식은 다양한 디바이스 장치로부터 서버에 데이터와 작업을 요청하고, 결과를 받는다는 점에서 유용하지만, 일반적인 웹 페이지와는 달리 화면을 제작하지 않는 형태로 처리되기 때문에, 브라우저로 결과를 체크할수가 없습니다. 최근에는 여러 종류의 REST클라이언트 테스트 프로그램이 존재합니다. 좀더 쉽게 결과를 테스트하기 위해서 크롬 브라우저의 앱으로 존재하는 Advanced REST Client나 PostMan등의 프로그램을 사용하여 테스트를 할 수 있습니다. PostMan 프로그램을 사용하여 클라이언트로부터 JSON데이터를 받은후 DB에 저장하는 과정을 포스팅 하겠습니다. 구글에 POSTMAN검색후 64비트 다운로드를 받으신 후 실행시켰을..

[ REST API] 서버 → 클라이언트 JSON형태 전송 @ResponseBody / @RestController

서버에서 클라이언트에게 JSON형태로 데이터 전송하기. @GetMapping("/hello") public String hello() { return "Hi!"; } 일반적인 방식의 메서드에서 return값이 문자열일 경우에는 뷰파일을 찾지못해 오류가 날것입니다. 뷰 리졸버가 동작하기 때문입니다. 뷰리졸버가 동작하고 Hi! 라는 jsp파일을 찾게되는데 해당 파일이 없어 오류를 띄우게 되는것입니다. 하지만 Rest API는 목적이 어떤 페이지를 여는것이 아닌, 데이터 전송에 대한 목적입니다. 바로 클라이언트쪽에 JSON방식으로 데이터를 주기위한 목적입니다. 서버에서 클라이언트에게 JSON방식으로 데이터를 주기 위해서는 @ResponseBody 라는 어노테이션을 사용합니다 @ResponseBody retur..

[REST API] REST와 JSON

REST API란? Representational Transfer의 약자입니다. Restful이라는것은 자원을 표현할 떄, http를통해 자원들을 식별할 때 uri를 crud규칙에 맞게 구현하는것을 RestAPI라고 부릅니다.(백엔드로직) 왜 쓰게 되었는가? 웹사이트를 만들 떄 웹에서만 돌아가게 만들면 사용성이 제한이됩니다 웹브라우저 뿐만아니라 모바일도 중요하고 pc프로그램으로도 사용될수있게되어 클라이언트가 점점 다양해지므로 그 요구에 맞춰 백엔드를 하나로 통합하여 모든 클라이언트에 붙이기 위해서는 어떻게 해야하는가 와 같은 요구사항들이 생기기 시작합니다. 배달 관련 어플리케이션에서, 사용자들로는 메뉴와 가격을 올리는 업주, 음식을 시키는 일반고객, 홈페이지 관리자 이런 사람들이 사용하는 어플리케이션을 ..