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ステータスを確認
以上、お疲れさまでした!