반응형

프로젝트를 진행 중에, spring security 를 이용해서 로그인을 하는 과정에서 로그인을 성공한 후에 jsp 로 로그인한 정보를 보내는 과정을 뒤져보는 과정에서 발견한 방법!!!

그건 HttpServletResponse 의 printWriter를 이용한 방법이었다. 

 

1. login.jsp

ajax를 이용하여 spring security 를 이용하여 로그인 프로세스를 타게 했다.

$.ajax({
    url: './loginCheck',
    data: datas,
    type: 'POST',
    dataType: 'json',
}).done(function(body) {
    console.log(body);
    var error = body.response.error;
});

login 로직을 탄 후에 받아오는 데이터 타입을 json으로 정의를 해두었다. 그래서 java에서도 보내는 데이터타입이 json 형태이어야한다. 아니면? 에러뜸!!! 주의해야함

 

2. AuthenticationSuccessHandlerImpl.java

로그인 로직이 성공했을 때 타게 spring-security.xml 에 설정해둔 implement 에 있는 메서드에 response를 받아오는 변수로 넣어두고 reponse.getWriter().print() 를 이용하여 위에 설정해둔 ajax의 결과값에 보내보자!

※주의! contentType, characterEncoding 을 설정해주어야하고,  print할 데이터는 꼭! json 값이어야함!! 아니길원하면 ajax 의 dataType 을 원하는 타입으로 수정하면 된다.

public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse res, Authentication auth) throws IOException, ServletException {
	String rUrl = defaultUrl;
    res.setContentType("application/json"); 
    res.setCharacterEncoding("utf-8"); 
    
    String data = "{\"response\":{\"error\":false,\"url\":\""+rUrl+"\", \"id\": \""+"userId"+"\", \"role\": \""+"roleId"+"\"}}";
	PrintWriter out = res.getWriter();
    out.print(data);
}

 

3. 로그인 후, console 확인

response object가 보내졌고, 보낸 data가 console에 찍혀있는걸 확인할 수 있다!!!!!

 

반응형

 

반응형
반응형

1. sts 실행하고, workspace 를 프로젝트 생성을 원하는 폴더를 지정해 실행해준다.

2. Spring Starter Project 선택 (file -> New -> Spring  Starter Project)

 

3. Spring Starter Project 선택 (file -> New -> Spring  Starter Project)

항목들을 알아보면, 

Service URL - Spring Initializer 서비스 URL 이다. 입력되어있는 URL 을 통해 Spring 홈페이지에서 데모 프로젝트를 다운받아준다. (Default) 
Name - 어플리케이션 명
Type - 어플리케이션 빌드 타입(Maven, Gradle). 간단한 차이점은 라이브러리를 받아오는 방법이 다르다. 
Packaging - 패키징하는 방법(Jar, War). Spring 에서는 Jar로 배포시 JSP사용이 불가능하여 webapp 폴더를 무시한다고한다. 그래서 Jar 로 배포하면 사용하지 못하니 War를 선택하겠다.
Java Version - 본인 컴퓨터에 다운되어있는 JAVA 의 버전을 선택해주면 된다. (java를 사용하겠다면)
Package - 기능별로 정리하는 폴더.  com.example.demo 로 정의되면 가장 큰 폴더 com / com 하위폴더 example / java 하위폴도 demo 를 의미한다.

 

4. dependencies 선택

 

5. finish 로 설정 끝내자

그러면 프로젝트가 생성됬음!! 

프로젝트 구조를 보면, java + resources(xml, static) + src

6. JSP 와 연동하여 브라우저로 접속해보기

TestController.java 와 test.jsp 파일을 생성해보자

생성하면 com.example.vue.controller 패키지 아래에 TestController.java 

jsp 파일을 만들고 싶어서 src폴더를 보니 webapp/WEB-INF 폴더들이 없었다. 그래서 알아보니, dynamicWebProject를 생성해야 가능하다는거

만약 front와 back을 둘다 하고 싶다면 Dynamic Web Project를 생성해라

반응형

 

반응형
반응형

Controller에서 List형태로 주소값에 보내줄 때, 이 list의 길이를 EL을 이용해서 뿌려주고 싶을때,

나는 이걸 몰랐을, Controller를 이용해서 list.size()해서 다시한번 modelAndView로 보내줬다. 하지만, 그런경우에는 쿼리를 반복해야하고 또한 보내는 수가 늘어나기때문에 데이터의 수가 많아지면 로딩하는데 오래 걸릴 수 있다. 그래서 jstl을 이용한 방법!!! 

(다른 블로그에서 fn.length(list) 를 이용해서 하시던데.... 그건 나에겐 되지않았다. fn라이브러리가 있었는데도 불구하고)

아주 간단하다!!!! list로 받아온거.size() 해주면 자바에서 받아오는 것처럼 사용할 수 있다!!! 완전 편함

반응형
반응형

Controller에서 addObject를 이용해서 List객체를 넘겨줬다. 저 getPerformanceOneWeek() 은 List<HashMap<String,Object>> 이다.

반복되고자하는 하는 부분은 <c:forEach>태그로 감싸주고

var : 내가 jsp파일에서 가져와서 대체해서 사용할 그 List의 명칭,
items :  Controller에서 보내줄 때의 객체 이름
varStatus : 반복되는 수라고 생각하면됨.

그래서 나는 List안에 HashMap으로 되어있기 떄문에 객체 이름 적고 . key 값 적어주면 값가져와준다!

ajax로 보낼까 생각했는데 Controller로 한번에 받는게 좋다고 하셔서 addObject와 JSTL을 이용해서 사용했다!

taglib에 이아이가 꼭 있는지 먼저 확인하자!! 나는 여기서 varStatus는 사용하지 않았다. 

 

 

반응형
반응형

mybatis를 이용할 때, 회원가입과 같은 로직을 진행할 때 두테이블에 insert를 해줘야하는데 첫번째 테이블에서 insert할때 생성되는 값을 두번째 테이블 insert시에 필요할때 사용!!!

엄청 유용하다!!!

나는 회원가입시에 학부모 회원가입에 먼저 insert되고, 회원가입 테이블에서 IDX 값(auto_increment가 걸려있음)을 학부모 매칭 테이블에 FK값으로 가져와야한다. 이럴 경우, 신기하게 selectKey 를 사용하면 편하다!!!! 

resultType : 해당 컬럼의 타입
keyProperty : 가져오고싶은 컬럼명
order : 쿼리 실행 전에 가져올 것인지, 실행 후에 가져올 것 인지

여기서 처음에 받아온 params 에는 insert 처음에 들어가는 키값들이 들어가 있고, AddNewParent 가 실행된 후에 원했던, IDX값이 {IDX : 값} 이렇게 추가 되어서 출력이 되어진다!!!

그래서 위에서 처음 로그 찍어봤을때랑 AddNewParent가 실행된 후에 찍어봤을때의 params에는 원했던 갑이 추가되어진 map으로 찍힐것이다!!!

 

반응형
반응형

Java에는 Collection 인터페이스와 Map 인터페이스가 존재한다. 이 인터페이스들은 기본적으로 가지고 있는 메서드 들이 존재하는데 자세한 사항들은 블로그 https://gangnam-americano.tistory.com/41 를 참조하기 바란다!!!

그 중에 이제까지 용이하게 사용했던 것은, contains 라는 메서드이다. 어떠한 값을 가지고있는지를 확인해서 boolean 형태로 값을 return 해주는 메서드다. List 객체에서만 전에 사용했었는데, 이번에 HashMap 을 사용하다가 특정한 Key 를 가지고 있는지 확인하는 방법을 알고 싶어 검색했더니, 아주 쉽게 있었다!!!!

HashMap 객체로 받아오는 updateInfo에 contiansKey("원하는Key") 를 실행하면 boolean으로 나와준다. 

이거와 마찬가지로 값도 가능하다.

항상 ctrl + 스페이스바 를 눌러 확인해보는걸 잊지말자!!! 그렇다면 구글링해서 찾아보지 않아도 됬을텐데....

반응형

+ Recent posts