본문 바로가기

프로그래밍/스프링프레임워크80

전자정부표준프레임워크 Spring Security 사용시 로그인한 사용자정보에 추가정보 넣기 전자정부표준프레임워크에서 스프링 시큐리티가 적용되어 있을 때 로그인한 사용자의 정보를 얻기 위해서는 다음과 같이 사용합니다. import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.com.cmm.LoginVO; ... // 로그인 여부 확인 Boolean isLogin = EgovUserDetailsHelper.isAuthenticated(); // 로그인한 사용자 정보 LoginVO user = null; if(isLogin) { user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); } 로그인 후 세션에 저장되어 있던 Log.. 2018. 4. 20.
전자정부표준프레임워크 Controller에 AOP 적용하기 전자정부표준프레임워크 Business 템플릿에서 Controller에 AOP를 적용해 보겠습니다. 1. 컨트롤러에 적용될 테스트 클래스입니다. package com.tistory.pentode.log; public class TestAspect { public void callFromController() { System.out.println("컨트롤러에 적용된 Aspect 입니다."); } } 2. context-aspect.xml 파일과 context-syslogaop.xml 파일에 예외 처리 및 로그를 남기기 위한 AOP가 적용되어 있습니다. 하지만, 여기서는 컨트롤러에 대한 AOP 를 추가하더라도 동작하지 않습니다. 루트 컨텍스트에서는 서비스와 DAO 객체만 로딩하고, 컨트롤러 객체는 없기 때문입.. 2018. 4. 20.
CKEditor 한글 파일명 이미지 업로드 에러(Spring Framework) 스프링 프레임웍에서 CKEditor에 한글 파일명의 이미지를 업로드 할때 다음과 같은 오류가 발생하는 경우 입니다. 업로드할 수 없는 확장자의 이미지를 업로드하였다는 메세지인데 실제 업로드한 이미지는 업로드 가능한 확장자를 가진 이미지일 경우 입니다. 로그를 확인해보니 한글 파일명이 깨져서 확장자를 판단하지 못해서 발생하는 에러입니다. 서블릿에서 POST 방식으로 보내진 데이터의 엔코딩을 지정하기 위해서는 request.setCharacterEncoding("utf-8"); 처럼 지정할 수 있습니다. 모든 서블릿에 매번 지정하게되면 중복된 코드를 계속 적어야 하므로 스프링 프레익웍에서는 엔코딩 필터를 제공합니다. 이 엔코딩 필터는 모든 다른 필터보다 먼저 나와야 전체에 적용이 됩니다. CKEditor 이.. 2018. 4. 20.
Srping Security 권한 직접 체크하기(시큐리티 태그와 인증 클래스) 스프링 시큐리티는 롤에 따른 URL에 대한 접근제어를 기본으로 하고, 이에 관한 설정을 xml 설정 파일에 기술합니다. 전자정부표준프레임워크에서는 접근을 제어할 URL 및 ROLE 정보를 데이터베이스에서 관리할 수 있도록 커스터마이징 되어 있습니다. 메인화면 등에 로그인 여부에 따라 다른 정보를 보여 준다던가, 같은 프로그램이지만 사용자의 롤에 따라 다른 처리가 필요한 경우 직접 프로그램으로 권한을 확인해서 처리를 해야 하는 경우가 있습니다. 프로그램으로 권한 체크를 하기 위해 HttpServletRequest 객체를 사용해서 권한 정보를 얻는 것이 가능합니다. 스프링 시큐리티를 체크하는 필터가 원본 HttpServletRequest 객체를 래핑해서 기능을 추가해서 제공하기 때문입니다. 다른 방법으로는 .. 2018. 4. 20.
CKEditor 이미지 업로드에 Spring Security CSRF 토큰 적용하기 Spring Security의 CSRF 방어 기능을 사용하게 되면 CKEditor의 이미지 업로드에도 CSRF 토큰을 보내줘야 됩니다. 이때 전자정부표준프레임웍 템플릿에서 처럼 이미지 업로드를 필터를 통해서 처리하고 있다면 필터의 순서가 중요해집니다. CKEditor 이미지 업로드를 처리하는 필터가 스프링 시큐리티를 처리하는 필터보다 앞에 나오게 되면 스프링 시큐리티 자체가 적용되지 않습니다. 필터의 순서는 web.xml 파일에 이 나오는 순서대로 적용이 됩니다. 1. 필터 순서는 스프링 시큐리티가 앞에 나오게 적습니다. springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChai.. 2018. 4. 20.
스프링프레임웍의 시동 스프링프레임웍이 제 기능을 수행하기 위해서는 필요한 설정, 빈들이 WAS 가 시작될 때 모두 생성되고, 준비가 되어야 합니다. 이렇게 준비하는 과정을 스프링프레임웍의 시동이라고 할 수 있겠습니다. WAS 가 시작될 때 필요한 설정들이 시작되는 곳이 배포 설명자(Deploy Descriptor)인 web.xml 파일입니다. 그러므로 스프링 프레임웍의 실행도 여기에서 시작합니다. 스프링프레임웍의 설정은 xml 파일로 작성되었었습니다. 지금은 순수한 자바 클래스에 아노테이션을 사용해서 설정을 할 수 있습니다. 그리고 그 두 가지를 섞어서 사용하는 것도 가능합니다. 이것들을 조합해서 사용할 수 있는 네 가지의 정도의 시동 방법을 알아보겠습니다. 전자정부표준프레임웍 템플릿의 설정으로 예를 들어 보겠습니다. 1. .. 2018. 4. 19.
전자정부표준프레임워크 3.6 Spring Security 설정 간소화에서 CSRF 설정하기 전자정부표준프레임워크 3.6 에서는 Spring Security가 권한 정보를 데이터베이스에서 가져오도록 커스터마이징 되어 있는데, 이로 인해 설정이 상당히 복잡해 집니다. 그래서 자체적인 설정을 만들어서 간소화 하고 있습니다. 여기에 CSRF(Cross-Site Request Forgery) 방어를 위해서 설정을 하려고 합니다. 그런데 간소화 설정에는 CSRF 관련 설정이 없는것 같습니다. 다음 예는 전자정부표준프레임워크 3.6.0 버전의 Enterprise Business 템플릿으로 테스트 하였습니다. 여기에는 Spring Security 3.2.4 버전이 사용되고 있습니다. 스프링 시큐리티를 xml 설정파일을 사용해서 설정할때는 CSRF가 기본적으로 비활성화 되어 있습니다. 보통 다음과 같이 활성화.. 2018. 4. 19.
log4jdbc-remix의 Custom SQL Formatter 만들기(SQL log 줄 바꿈) SQL Query 로그의 줄을 바꿔서 어느정도 예쁘게 출력하는 방법을 알아보겠습니다. log4jdbc-remix 를 사용해서 쿼리 로그를 만들게 됩니다. 테스트는 전자정부표준프레임워크 비즈니스 템플릿을 MySQL(실제는 MariaDB)와 연동한 소스에서 하였습니다. 전자정부표준프레임워크는 SQL 쿼리를 로그로 출력하기 위해서 log4jdbc를 사용하고 있습니다. log4jdbc-remix는 log4jdbc의 또다른 실험적인 분기로써 SQL 포맷뿐만 아니라 DB로부터 가져오는 값들을 추적할 수 있는 다양한 기능을 제공합니다. 실제 적용해본 결과로는 두가지 문제점이 있었습니다. 첫 번째는 쿼리 왼쪽에 여백을 주는 margin 프로퍼티를 사용하면 오류가 발생합니다. java.util.FormatFlagsCon.. 2018. 4. 19.
스프링프레임웍 - 메일 발송하기 스프링프레임웍의 JavaMailSenderImpl을 이용해서 메일을 발송하는 방법에 대해 알아 보겠습니다. 메일을 발송하려면 메일을 발송해주는 메일 서버(SMTP Server)가 있어야 합니다. 메일 서버를 통해 메일을 보낼때 서버에 접속하는 방법은 보통 두 가지가 있습니다. 첫 번째는 서버가 릴레이를 허용하는 경우 입니다. 메일 서버가 릴레이를 허용하는 경우 그 메일 서버에 계정이 없더라도 메일을 발송할 수 있습니다. 이렇게 릴레이를 허용하는 경우 타인에 의해 스팸 메일을 보내는데 악용이 될 수 있으므로 특정 IP에서만 릴레이가 되도록 하는게 일반적입니다. 두 번째는 메일 서버에 계정이 있어서 아이디와 비밀번호로 인증후 메일을 보내는 방법 입니다. 요즘은 두 번째가 가장 일반적인 방법일 것입니다. 1... 2018. 4. 17.
스프링프레임웍 - Tomcat에서 POST/GET 데이터 인코딩 설정 Tomcat에서 스프링프레임웍을 사용할때 POST방식으로 데이터를 전송할 때와 GET 방식으로 데이터를 전송할때 인코딩 지정을 별도로 하여야 합니다. 1. POST 데이터의 인코딩은 web.xml 에서 필터를 사용해서 처리합니다. encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter *.do 위 설정에서는 필터 맵핑은 *.do 로 끝나는 모든 요청에 적용되어 집니다. 2. GET 방식의 데이터의 인코딩은 server.xml 파일의 Connector 설정에서 처리합니다. 웹 프로그래밍에서 전송되는 데이터의 인코딩 설정은 WAS에 따라 달라질 수 있습니다. 이 글에서는 Tomcat 에.. 2018. 4. 17.
전자정부 표준프레임워크 - dataSource (DBCP) 설정하기 전자정부 표준프레임워크의 템플릿 프로젝트를 설치하고 실행해보면 데이터베이스와의 연결풀을 설정하는 DataSource 설정에 Apache Common DBCP(Database Connection Pool)을 사용하고 있습니다. 대부분 개발후 운영환경에서는 WAS(Web Application Server)에서 제공하는 DataSource를 사용하도록 수정할 것이므로, 기본 설정을 그대로 사용하고 변경하는 일은 잘 없을 것입니다. 하지만 운영환경이 Tomcat 이라면 대부분 연결풀로 DBCP 를 사용하므로 설정 방법을 알아 두는 것도 나쁘지 않을 것입니다. 다음은 전자정부 표준프레임웍 Portal 사이트 템플릿 프로젝트의 DataSource 기본 설정입니다. 이 템플릿은 commons-dbcp 1.4 버전을 .. 2018. 4. 17.
전자정부 표준프레임워크 - JUnit 4 Test Case 생성하기 전자정부 표준프레임워크 Portal 템플릿 사이트에 컨트롤러를 테스트하기 위한 테스트 케이스를 추가해 보겠습니다. 1. src/test/java 폴더에 테스트 케이스가 들어갈 패키지를 생성합니다. 이 예제에서는 com.tistory.pentode.test로 만들었습니다. 2. 위에서 만들 패키지에 마우스 오른쪽 키를 눌러 New -> JUnit Test Case를 실행합니다. 3. Junit Test Case 생성창에서 클래스명을 ControllerTest 라고 입력하고 Finish 버튼을 누릅니다. 4. JUnit 4 라이브러리를 build path 에 추가할지 물어 봅니다. "Perform the following action"을 선택해서 빌드 패스에 추가합니다. "OK" 버튼을 누릅니다. 5. po.. 2018. 4. 12.
스프링 빈(bean) 및 서블릿(servlet) 객체 직접 얻기 스프링 프레임웍을 사용하여 개발 할때 서비스 객체나 DAO 객체의 빈(bean)을 얻기위해서는 @Autowired 또는 @Resource(name = "빈이름") 같은 annotation 을 사용해서 얻게 됩니다. HttpServletRequest, HttpServletResponse, HttpSession과 같은 서블릿(Servlet)객체를 얻기 위해서는 Controller 메소드의 인자로 지정해서 값을 얻고 필요하면 서비스 객체로 보내기 위해서 서비스 객체의 인터페이스에 인자로 정의해서 사용합니다. 이 이외에 유틸리티성 객체에서 데이터베이스에 접근하고자 할때나, 컨트롤러(Controller)나 서비스 객체가 아닌 리스너나, AOP 등에서 서비스객체 또는 DAO 객체를 사용해야 할 경우가 있습니다. 이.. 2018. 4. 12.
스프링프레임웍 - Ajax 통신(@RequestBody, @ResponseBody) 이번에는 스프링프레임웍을 사용해서 Ajax 통신을 하는 방법에 대해서 알아보도록 하겠습니다. jquery를 이용해서 Ajax로 데이터를 보내고, 결과를 JSON 데이터를 받는 예제입니다. 이번 예제는 "스프링 프레임웍에서 MyBatis, Oracle 사용하기" 에서 사용된 프로젝트를 기반으로 합니다. 또한 클라이언트 측은 "AX5UI - GRID 6 (페이징)" 에서 사용된 예제를 변형하여 AX5UI 그리드에 Ajax와 JSON 데이터를 이용해서 조회하는 예제를 만들어 보겠습니다. 전체 소스를 하단에 첨부 되어 있습니다. 먼저 실행 결과 화면을 보겠습니다. AX5UI 그리드에 구분, 완료 값을 조회조건으로 하여 조회합니다. 조회는 POST 방식과 GET 방식일 경우 각각 어떻게 데이터를 전송하고 서버측에.. 2018. 4. 9.
스프링프레임웍 - Spring Security(3) : 사용자/권한 정보 DB사용하기 앞서 "스프링프레임웍 - Spring Security(2) : 커스텀 로그인 화면 및 권한에 따른 접근 제어"에서 로그인 화면을 원하는 형태로 만드는 방법에 대해서 알아 보았습니다. 지금까지의 기본설정과 화면 커스터마이징에서는 사용자 정보와 권한 정보가 모두 security-context.xml 파일 안에 있었습니다. 이번에는 이 정보들을 DB 저장하고 이용할 수 있도록 해 보겠습니다. 데이터베이스는 Oracle을 사용합니다. 먼저 사용자 정보와 권한정보를 저장할 테이블 구조 입니다. 이 테이블들은 스프링 시큐리티의 DB 지원 기본 구조를 키구조만 조금 바꾼것 입니다. 1. 사용자/권한 테이블 사용자 권한 처리를 위해서 총 5개의 테이블로 구성됩니다. 테이블을 생성하고 기본 데이터를 입력하는 쿼리파일은 .. 2018. 4. 9.