続き
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が返るようになる。