본문 바로가기
  • 일하면서 배운 내용 끄적이는 블로그
Java

Java Servlet API에서 서버 파일 접근 차단하기

by dhl7799 2024. 7. 18.

최신버전 모바일 서버는 Spring을 사용하고 있는데

 

예전 버전인 Java Servlet 기반 모바일 서버에서 문제가 생겼다

 

비로그인 상태로도 url로 서버 내부 파일을 접근해서 열거나 다운로드 할 수 있었음

 

그래서 해당 클래스를 추가해서 해결했다

package com.nanum.util;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter(urlPatterns = {"*.png", "*.txt", "*.pdf", "*.jpg", "*.zip", "*.doc", "*.xls", "*.xlsx", "*.ppt", "*.pptx", "*.properties", "*.xml", "*.yaml"})
public class FileAccessFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 필터 초기화 메서드
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        HttpSession session = httpRequest.getSession(false); // 세션이 없으면 새로 생성하지 않음

        String requestURI = httpRequest.getRequestURI();

        //메인 로고는 
        if (requestURI.endsWith("/main_logo.png") || requestURI.endsWith("/loader.gif")) {
            chain.doFilter(request, response); // 다음 필터 또는 서블릿으로 요청 전달
        } 
        
        else {
        	if (session == null || session.isNew() || session.getAttribute("userId") == null) {
                // 세션이 없거나 새로 생성된 경우, 또는 userId 속성이 없는 경우
                httpResponse.sendRedirect(httpRequest.getContextPath() + "/login.jsp");
                return;
            }
        }
        
        // 세션이 유효하고 사용자가 로그인한 경우
        chain.doFilter(request, response); // 다음 필터 또는 서블릿으로 요청 전달
    }

    @Override
    public void destroy() {
        // 필터 종료 메서드
    }
}

 

세션으로 로그인 여부를 확인하고 로그인 상태이면 접근 가능, 로그인 상태가 아니라면 로그인 페이지에 있는 로고 파일이랑 로딩 파일만 접근 가능하도록 했다

 

별도의 추가적인 설정 없이도 바로 작동했는데 원래 이런건지는 모르겠다

'Java' 카테고리의 다른 글

빌더 패턴 (Builder Pattern)  (0) 2024.07.09
Cipher 클래스 - Java의 암호화 & 복호화 담당  (0) 2024.04.24
Try-Catch 자동 close  (0) 2024.02.26
URI, URL, ContentPath, RemoteAddr 출력  (0) 2024.02.22