LoginSignup
0
0

More than 3 years have passed since last update.

【301リダイレクト】spring framework でリダイレクトをカスタマイズ

Last updated at Posted at 2021-02-25

spring framework で301リダイレクトを簡単に

・毎回 RedirectView を作って設定とか面倒
・”redirect301:" でできるようにしたい
・ソース見てみたけど分かりづらい…困ったときの interceptor
・301 以外も自由にカスタマイズできそう

環境

・Windows10 64bit
・SpringFramework 4
・Java 8

CustomRedirectInterceptor

CustomRedirectInterceptor.java
/**
 * 
 * カスタムリダイレクト用インターセプタ
 *
 */
public class CustomRedirectInterceptor extends HandlerInterceptorAdapter {

    private static final String REDIRECT_PREFIX = "redirect:";
    private static final String REDIRECT_301_PREFIX = "redirect301:";

    public void postHandle(HttpServletRequest request, HttpServletResponse response, 
            Object handler, ModelAndView modelAndView) {

        if (modelAndView != null) {
            String viewName = modelAndView.getViewName();
            if (StringUtils.isNotBlank(viewName)) {
                // 301 リダイレクト対応
                if (viewName.startsWith(REDIRECT_301_PREFIX)) {
                    request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.MOVED_PERMANENTLY);
                    modelAndView.setViewName( viewName.replace(REDIRECT_301_PREFIX, REDIRECT_PREFIX) );
                }
            }
        }
    }
}

ビュー名を取得して301用のプレフィクスだったら MOVED_PERMANENTLY をセットして
通常のリダイレクトビュー名に戻すだけ。

インターセプタの設定

servlet-context.xml
    <interceptors>
        <!-- カスタムリダイレクト用 -->
        <interceptor>
            <mapping path="/**" />
            <exclude-mapping path="/images/**" />
            <beans:bean class="your.own.domain.CustomRedirectInterceptor" />
        </interceptor>
    </interceptors>

書式

return "redirect301:/foo/bar";

301ステータスを確認

・chrome 開発者ツール -> Network
image.png

以上、お疲れさまでした!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0