vmファイルへの直アクセスを防ぐ

続き

Velocityのテンプレートを指定の場所に置けるのはいいのだが、結局vmファイルに直接アクセス(実際にはVelocityViewServletへのアクセス)できてしまうのであんまり意味が無い。サーブレットからのフォワードだけ許可するにはフィルタを使えばいい。

こんなサーブレットフィルタを作って…

package jp.paulownia.servlet;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;

public class NotFoundFilter implements Filter{
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(
             ServletRequest req, ServletResponse res, FilterChain chain) 
             throws IOException, ServletException {
		
        ((HttpServletResponse)res).sendError(404, ((HttpServletRequest)req).getRequestURI());
   }
	
   @Override
   public void init(FilterConfig conf) throws ServletException {
   }
}

web.xmlに設定

    <filter>
        <filter-name>notFound</filter-name>
        <filter-class>jp.paulownia.servlet.NotFoundFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>notFound</filter-name>
        <url-pattern>*.vm</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

これで、vmファイルへ直接アクセスすると404 Not Foundが返るようになる。