[JAVA]ftp util

JAVA 2017. 11. 24. 13:16

ftp util


// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.

// Jad home page: http://www.kpdus.com/jad.html

// Decompiler options: packimports(3)

// Source File Name:   NetFTP.java


package kr.co.raysystem.util;


import com.oreilly.servlet.MultipartRequest;

import java.io.*;

import java.util.ArrayList;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import kr.co.raysystem.common.UniqueFileRenamePolicy;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;


public class NetFTP

{


    public NetFTP()

    {

        FTP_ID = "tmax";

        FTP_PASS = "tmax";

        FTP_IP = new String();

    }


    public void XMLFileUPLoad(HttpServletRequest request, String fileName, String path, String FTPPath)

    {

        ArrayList list = new ArrayList();

        list.add("203.128.238.174");

        list.add("203.128.238.175");

        if(request.getLocalAddr() != null && request.getLocalAddr().equals("98.0.38.88")){

            FTP_IP = "98.0.38.89";

            FTP_PASS = "qhdks@89";

}else{

            FTP_IP = "98.0.38.88";

            FTP_PASS = "qhdks@88";

        }

        execute(FTP_IP, FTP_ID, FTP_PASS, fileName, path, FTPPath, true);

        //for(int i = 0; i < list.size(); i++)

        //    execute(list.get(i).toString(), FTP_ID, FTP_PASS, fileName, path, FTPPath, true);


    }


    public MultipartRequest fileUpload(HttpServletRequest request, String path, String FTPPath)

    {

        int sizeLimit = 0x7a1aca00;

        if(request.getLocalAddr() != null && request.getLocalAddr().equals("98.0.38.88")){

            FTP_IP = "98.0.38.89";

            FTP_PASS = "qhdks@89";

}else{

            FTP_IP = "98.0.38.88";

            FTP_PASS = "qhdks@88";

        }

        MultipartRequest multi = null;

        Enumeration formNames = null;

        String formName = null;

        String Cfile[] = (String[])null;

        try

        {

            UniqueFileRenamePolicy dfrp = new UniqueFileRenamePolicy();

            multi = new MultipartRequest(request, path, sizeLimit, "euc-kr", dfrp);

            ArrayList newFile = new ArrayList();

            for(formNames = multi.getFileNames(); formNames.hasMoreElements();)

            {

                formName = (String)formNames.nextElement();

                newFile.add(multi.getFilesystemName(formName));

                File file = multi.getFile(formName);

                HttpSession session = request.getSession(true);

                if(file != null)

                    session.setAttribute("RAY_FILESIZE", String.valueOf(file.length()));

            }


            Cfile = new String[newFile.size()];

            for(int i = 0; i < newFile.size(); i++)

                if(newFile.get(i) == null)

                {

                    Cfile[i] = "";

                } else

                {

                    Cfile[i] = (String)newFile.get(i);

                    execute(FTP_IP, FTP_ID, FTP_PASS, Cfile[i], path, FTPPath, true);

                }


        }

        catch(IOException e)

        {

            System.out.println(e.toString());

            e.printStackTrace();

        }

        return multi;

    }


    public void delete(HttpServletRequest request, String path, String FTPPath)

    {

        if(request.getLocalAddr() != null && request.getLocalAddr().equals("98.0.38.88")){

            FTP_IP = "98.0.38.89";

            FTP_PASS = "qhdks@89";

}else{

            FTP_IP = "98.0.38.88";

            FTP_PASS = "qhdks@88";

        }

        File file = new File(path);

        if(file.exists())

            file.delete();

        execute(FTP_IP, FTP_ID, FTP_PASS, null, path, FTPPath, false);

    }


    public void execute(String rmoteServerIP, String id, String pass, String filename, String path, String FTPPath, boolean flag)

    {

        FTPClient ftpClient = null;

        try

        {

            ftpClient = new FTPClient();

            ftpClient.setControlEncoding("euc-kr");

            System.out.println("rmoteServerIP:["+rmoteServerIP+"]");

            ftpClient.connect(rmoteServerIP);

            int reply = ftpClient.getReplyCode();

            if(!FTPReply.isPositiveCompletion(reply))

            {

                ftpClient.disconnect();

            } else

            {

                ftpClient.setSoTimeout(10000);

                ftpClient.login(id, pass);

                ftpClient.setFileType(2);

                ftpClient.setFileTransferMode(10);

                if(flag)

                {

                    boolean result = false;

                    InputStream inputStream = null;

                    java.io.OutputStream outputStream = null;

                    File put_file = new File(path + File.separator + filename);

                    inputStream = new FileInputStream(put_file);

                    ftpClient.makeDirectory(FTPPath);

                    ftpClient.changeWorkingDirectory(FTPPath);

                    result = ftpClient.storeFile(put_file.getName(), inputStream);

                    inputStream.close();

                    if(result)

                        System.out.println("put successful");

                    else

                        System.out.println("put failure!");

                } else

                {

                    ftpClient.deleteFile(FTPPath);

                }

                System.out.println(path + File.separator + filename);

                System.out.println("FTP \uD30C\uC77C\uACBD\uB85C " + FTPPath);

                ftpClient.logout();

            }

        }

        catch(Exception e)

        {

            System.out.println(e);

            e.printStackTrace();

        }

        if(ftpClient != null && ftpClient.isConnected())

            try

            {

                ftpClient.disconnect();

            }

            catch(IOException ioe)

            {

                ioe.printStackTrace();

            }

    }


    private String FTP_ID;

    private String FTP_PASS;

    private String FTP_IP;

}

블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

filter에서 파라미터 받기



web.xml의 <web-app>안에 추가해야할 문장입니다.


<filter>

<filter-name>timer</filter-name>

<filter-class>com.filter.TimerFilter</filter-class>

</filter>


<filter-mapping>

<filter-name>timer</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>




TimeFilter.java


package com.filter;


import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;


import javax.servlet.http.HttpServletRequest;



public class TimerFilter implements Filter {


private FilterConfig config;


@Override


public void destroy(){


}


@Override

public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {


//req 필터


long begin= System.currentTimeMillis();       // 요청받았을 때의 시간 찍힘.


// 다음 필터 또는 필터의 마지막이면 jsp나 servlet 실행.


chain.doFilter(req, resp);


//resp 필터

long end=System.currentTimeMillis();    // 응답할 때의 시간 찍힘.


String uri;


if(req instanceof HttpServletRequest){


HttpServletRequest request=(HttpServletRequest)req;  // ServletRequest에는 uri가 없으므로 다운캐스팅함.


uri=request.getRequestURI();


    String msg=uri=uri+":"+(end-begin)+" ms";


    config.getServletContext().log(msg);  //getServletContext()의 log메소드를 이용한 콘솔창 출력. 


//system.out.print 가 아닌 log를 이용하여 확인.


 

}


}


@Override


public void init(FilterConfig config)throws ServletException {

this.config = config;

}

}


// web.xml로 인하여 클라이언트의 모든 요청이 이곳의 TimerFilter클래스로 진입하여 doFilter()를 실행합니다.

// req 필터(요청된거 먼저) 이곳의 진입 시간을 찍고(long begin= System.currentTimeMillis();) 

//  chain.doFilter(req, resp); => 다음 필터실행, 실행할 필터가 없으면 jsp나 servlet실행하라는 명령입니다.

//  resp 필터(응답 나중 )실행 long end=System.currentTimeMillis(); 실행합니다.




web.xml의 <web-app>안에 추가해야할 문장



<filter>


<filter-name>CharacterEncoding</filter-name>


   <filter-class>com.filter.CharacterEncodingFilter</filter-class>


   <init-param>


       <param-name>charset</param-name> <!-- 해당경로에서만 사용할 수 있는 속성을 미리 정의함 (charset이라는 key로 utf-8이라는 값으로 정의함)


       <param-value>utf-8</param-value>


    </init-param>


</filter>


<filter-mapping>


<filter-name>CharacterEncoding</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>




CharacterEncodingFilter.java


package com.filter;


import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;



public class CharacterEncodingFilter implements Filter{


private String charset;


@Override


public void destroy() {


}


@Override


public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {


// req 필터.


req.setCharacterEncoding(charset);


chain.doFilter(req, resp);


//resp 필터(없음).

}


@Override


public void init(FilterConfig config) throws ServletException {


charset=config.getInitParameter("charset"); //web.xml의 param을 통해 보낸 인자값을 getInitParameter을 통해서 받습니다.


if(charset == null || charset.lenght() == 0)


charset="utf-8";

}

}


// TimerFilter가 먼저 실행 : web.xml에서 먼저 작성되있기 때문입니다.




web.xml의 <web-app>안에 추가해야할 문장

<filter>


<filter-name>login</filter-name>


<filter-class>com.filter.LoginFilter</filter-class>


</filter>


<filter-mapping>


<filter-name>login</filter-name>


<url-pattern>/*</url-pattern>


</filter-mapping>




LoginFilter.java


package com.filter;


import java.io.IOException;


import javax.servlet.Filter;


import javax.servlet.FilterChain;


import javax.servlet.FilterConfig;


import javax.servlet.RequestDispatcher;


import javax.servlet.ServletException;


import javax.servlet.ServletRequest;


import javax.servlet.ServletResponse;


import javax.servlet.http.HttpServletRequest;


import javax.servlet.http.HttpSession;



public class LoginFilter implements Filter {


@Override


public void destroy() {


}


@Override


public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {


if(req instanceof HttpServletRequest){

HttpServletRequest request = (HttpServletRequest)req;


HttpSession session=request.getSession();


String uri=request.getRequestURI();


boolean flag = false;


String[] u={


"/sbbs/created.kp","/sbbs/created_ok.kp" // 어떤 페이지를 로그인 해야만 접근할 수 있는지를 명시합니다.


};


for(String s:u){

if(uri.indexOf(s) != -1){

flag = true;


break;

}

}


if(session != null && flag){

// login에서 member라는 이름으로 로그인 정보를 저장한 경우입니다.

if(session.getAttribute("member") == null){


String p="/WEB-INF/views/member/login.jsp";  // 로그인 페이지의 경로를 적어줍니다.


RequestDispatcher rd = req.getRequestDispatcher(p);


rd.forward(req, resp);


return;

}

}


}


chain.doFilter(req, resp);

}


@Override


public void init(FilterConfig config) throws ServletException {


}


}


Filter의 실행 구조


implemente filter를 한 후에 destroy(), doFilter(ServletRequest req, ServletResponse resp,FilterChain chain),  init(FilterConfig config) 3개의 메소드를 재정의해줍니다.


web.xml을 통하여 web.xml에 가장 먼저 작성된 순서로 명시된 Filter의 클래스로 돌아오게 되면 doFilter메소드를 실행합니다.


doFilter의 req명령을 실행하다가 중간에 chain.doFliter(req.resp); 만나게 되면 web.xml에 명시된 다음 Filter로 넘어갑니다. 만약 다음에 실행할 filter가 없으면 jsp나 servlet과 같은 클라이언트의 직접적인 요청을 처리하고 가장 나중에 실행된 filter부터 반대순으로 chain.doFilter(req,resp); 다음의 명령들을 실행하고 실행이 모두 끝나면 계속 반대순으로 처음에 시작했던 filter의 resp필터요청까지 끝냅니다.

블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,

Filter를 이용한 request 파라미터 변경 방법 




Filter를 이용한 request 파라미터 변경 방법.




package keis.user.comm;


import java.io.IOException;


import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.commons.logging.Log;  

import org.apache.commons.logging.LogFactory;


import egovframework.rte.ptl.mvc.filter.HTMLTagFilterRequestWrapper;



public class MenuAuthFilter  implements Filter{


protected Log log = LogFactory.getLog(this.getClass());


private FilterConfig config;


public MenuAuthFilter(){

}


public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {


//new 생성자로 새로운 HttpServletRequest를 캐스팅 하여 request에 담습니다.

chain.doFilter(new HTMLTagFilterRequestWrapper((HttpServletRequest)request), response);

String uri = ((HttpServletRequest)request).getRequestURI();


//해당 세션의 사용자 권한을 가져옵니다.


//해당 권한에 해당 URL 패턴이 있는지 체크합니다.

}


@Override

public void dostroy(){


}


@Override

public void init(Filterconfig config) throws ServletException{

this.config = config;

}

}




javax.servlet.http.HttpServletRequestWrapper 를 상속받아 getParameterValues와 getParameter를 변경해 줌으로서 

값을 변경하여 뿌려 줄수 있습니다.

실재로는 값을 변경하는 것이 아니라. 뿌릴때 변경하여 뿌려주는 것이입니다.



package egovframework.rte.ptl.mvc.filter;


import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletRequestWrapper;


public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper{


public class HTMLTagFilterRequestWrapper extends HttpServletRequestWrapper{

super(request);

}


public String[] getParameterValues(String parameter){

String values[] = super.getParameterValues(parameter);

if(values == null)

return null;

for(int i = 0; i < values.length; i++)

if(values[i] != null){

StringBuffer strBuff = new StringBuffer();

for(int j = 0; j < values[i].length(); j++){

char c = values[i].charAt(j);

switch(c){

case 60: // '<'

strBuff.append("&lt;");

break;


case 62: // '>'

                            strBuff.append("&gt;");

                            break;


case 38: // '&'

                            strBuff.append("&amp;");

                            break;


                            case 34: // '"'

                            strBuff.append("&quot;");

                            break;


                            case 39: // '\''

                            strBuff.append("&apos;");

                            break;


default:

strBuff.append(c);

break;

}

}


values[i] = strBuff.toString();

}else{

values[i] = null;

}


return values;

}


public String getParameter(String parameter){

String value = super.getParameter(parameter);


if(value == null)

return null;

StringBuffer strBuff = new StringBuffer();

for(int i = 0; i < value.length(); i++){

char c = value.charAt(i);

switch(c){

case 60: // '<'

                   strBuff.append("&lt;");

                   break;


                  case 62: // '>'

                   strBuff.append("&gt;");

                   break;


              case 38: // '&'

               strBuff.append("&amp;");

               break;


          case 34: // '"'

          strBuff.append("&quot;");

          break;


          case 39: // '\''

          strBuff.append("&apos;");

          break;


          default:

          strBuff.append(c);

          break;

}

}


value = strBuff.toString();

return value;

}

}

블로그 이미지

마크제이콥스

초보 개발자의 이슈및 공부 내용 정리 블로그 입니다.

,