반응형

Interceptor.java

public class Interceptor extends HandlerInterceptorAdapter{
	
	private final static Logger LOGGER = LoggerFactory.getLogger(Interceptor.class);
	
	@Autowired
	AccessHistoryService accessHistoryService;
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		
		HttpSession session = request.getSession();
		String ipAddress = Utils.getClientIp(request);
		
    	String prevURI = "";
    	
		if( request.getRequestURI() != null ) {
			if( session != null && session.getAttribute("prevURI") != null ) {
				LOGGER.debug("prev session:"+session.getAttribute("prevURI"));
				prevURI = session.getAttribute("prevURI").toString();
				if( request.getQueryString() != null ) prevURI += "?"+request.getQueryString();
				session.setAttribute("prevPrevURI", prevURI);
			}
			prevURI = request.getRequestURI();
			session.setAttribute("prevURI", prevURI);
			LOGGER.debug("URI =========================="+prevURI);
		}
		
		LOGGER.debug("preHandle =prevURI:"+prevURI);
        
		// 디바이스 종류
		String dvcType = "Desktop";
		if(request.getHeader("User-Agent") != null && request.getHeader("User-Agent").toUpperCase().indexOf("MOBILE") > 0 ) dvcType = "Mobile";
		
        // 접속한 브라우저 종류 가져오기
		String brwsType = Utils.getAccBrowserType(request);
		
		
		HashMap <String,Object> accHisMap = new HashMap<String, Object>();
		accHisMap.put("atryMbrId", "");						// 접속회원아이디
		accHisMap.put("cntnIpAddr", ipAddress);				// ip주소
		accHisMap.put("accUrlAddr", prevURI);				// uri 주소
		accHisMap.put("accPrmt", request.getQueryString());	// 접근 파라미터
		accHisMap.put("dvcType", dvcType);					// 디바이스 종류
		accHisMap.put("brwsType", brwsType);				// 브라우저 종류
		
        // 쿼리에 입력
		int res = accessHistoryService.insertAccessHistory(accHisMap);
		LOGGER.debug("acc history result:"+res);
	
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		super.postHandle(request, response, handler, modelAndView);
	}
	
}
반응형

context-properties.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
	
	<beans:bean name="propertiesService" class="egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
		<beans:property name="properties">
	        <beans:map>
	        	<beans:entry key="pageUnit" value="10"/>
	        	<beans:entry key="pageSize" value="10"/>
	        </beans:map>
		</beans:property>
	</beans:bean>
	
	
	<!-- <util:properties id="server" location="/WEB-INF/properties/server.properties"/> -->
	<beans:bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<beans:property name="locations">
        	<beans:list>
       			<beans:value>/WEB-INF/properties/server.properties</beans:value> 
        	</beans:list>
        </beans:property>
		
	</beans:bean>
	
	<util:properties id="server" location="/WEB-INF/properties/server.properties"/>
	
    
    <!-- interceptor 설정 부분 -->
	<interceptors>
		<interceptor>
			<mapping path="/**"/>
			<exclude-mapping path="/resources/**"/>
			<beans:bean id="commonInterceptor" class="com.kyobo.kdkb.common.interceptor.Interceptor">
			</beans:bean>
		</interceptor>
	</interceptors>
		
</beans:beans>

 

끄읏

반응형
반응형

프로젝트를 진행 중에, 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에 찍혀있는걸 확인할 수 있다!!!!!

 

반응형

 

반응형
반응형

STS 를 다시 깔고 시작할때 자주 겪은 로딩이라 기록해둔다.

특히 java 파일에서 수정을 하고 저장을 누르면 화면이 멈추면서 아무것도 누를 수 없게 로딩이 걸린다. 그러고 로딩이 풀리고 아래의 process 를 뭐하고있나 보면, building, validating 을 진행하고있다... 

매번 수정을 할 때마다 building, validating 을 멈추게 하고 싶으면!!

첫번째, validation 끄기

window > preferences > Validation

Build 부분에 체크를 모두 disable 시켜준다.

두번째, 자동으로 매번 building 끄기

Project > Build Automatically 의 체크를 없애준다.

참고로, 바로 적용되는게 아니라 STS 를 껐다 켜줘야한다!!! 그러면 세상 살 것처럼 빨라진 걸 느낄 것 이다!

반응형

 

반응형
반응형

공식사이트 주소: https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.10:gettingstarted

0. 개발 환경 정보

OS  -  Windows 10, 7 이상
JDK - Java SE SDK 7.0 이상

IDE -  Eclipse 4.16.0  / JDK 8이상 

 

1. 개발 환경  설치

1) eclipse 기반의 전자정부표준 프레임워크의 구현도구 (implementation tool) 설치

참고주소: https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.10:clntinstall

다운로드 주소 : https://egovframe.go.kr/home/main.do

 

압축을 풀고 그 폴더에 있는 eclipse.exe 실행

exe 실행

 

workspace 설정을 개발환경에서 제공하는 workspace 를 선택

전자정부 표준프레임워크에서는 eclipse에 eGovFrame 관련 설정정보를 세팅하여 배포하기 때문

 

Perspective에 eGovFrame 이 있는지 확인

 

2) 프로젝트 생성 및 실행

File > New > eGovFrame Web Project  선택
eGovFrame Web Project 생성
Generate Example 부분에 체크!

프로젝트 Maven 설정 입력 ( runtime environment 설정 뒤는 생략하겠다, 본인 apach tomcat 가 잇는 폴더를 선택해주면된다)

 

3) 서버 설치

Apache Tomcat을 설정해준다. 개발환경 3.7 이상의 경우 Tomcat 8.0 이상을 권장함!

 

4) 프로젝트 실행

실행할 프로젝트를 마우스 우클릭하고  Run As > Run on Server

 

아래와 같은 화면이 실행되는지 확인

5) Maven환경설정

Maven 설정파일 및 종속 라이브러리를 포함한 압출파일을 다운로드

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.10:gettingstarted 

Maven 환경설정에 maven repository 3.10 을 다운 

다운받은 maven 폴더에 settings.xml 넣기! 나는 그 파일이 없길래 다운받아서 넣어주었다!

settings.xml 열고 localRepository 태그에  이파일의 디렉토리/repository를 넣어준다.

window > preferences > Maven > User Settings User Settings 항목을 설치한 maven 디렉토리 / settings.xml 파일로 지정

 

반응형

 

반응형
반응형

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를 생성해라

반응형

 

반응형
반응형

Tomcat, java, server까지 tomcat과 연결했는데도 run on server 했을 때 localhost로 주소값을 찾을 수 없다고 작동이 아무것도 하지 않을 때!!!!! 아무리 확인해도 안될 이유가 없는데 안된다!!!!

tomcat서버에 마우스 오른쪽버튼!

Add and Remove 클릭해서, 서버에서 보고싶은 프로젝트 선택해서 Add> 선택!!

그러면 끄읏!!!!

반응형
반응형

나는 log4j를 최신버전으로 업그레이드 해줄 예정이다.

항상 maven만 사용했었어서 gradle은 낯설었다.... 참고로 maven은 pom.xml들어가서 수정해주면된다!

gradle은 build.gradle에 있기 때문에, 파일에 들어가서 version에 최근에 안정화되었다는 버전 2.17 버전으로 바꿔주고 저장한뒤 build해주고, refresh gradle project를 해준다!! 여기서 refresh gradle project 해주는거 잊지말자!!

 

간단하지만.... 해본적이 없다면 헷갈리고 생각이 안나는 부분인거같다...

반응형
반응형

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

엄청 유용하다!!!

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

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

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

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

 

반응형

+ Recent posts