spring bootでredirectする際は、プロトコルがデフォルトでhttp
になる。
使用する場合は、プロトコルを意識して使う必要がある。
環境毎(開発、ステージング、本番)でプロトコルが違う場合は、特に注意。
※本来は環境を合わせるべき。
TestContoroller.java
public class TestController {
@GetMapping("/show")
public ModelAndView test() {
return new ModelAndView("redirect:" + "/sample");
}
}
上記の場合は、
http://localhost/sample
になる。
これをapplication.ymlから読み込んでセットしたい場合
TestContoroller.java
@RequiredArgsConstructor
@EnableConfigurationProperties({RedirectUrlProperties.class})
public class TestController {
private final RedirectUrlProperties redirectUrlProperties;
@GetMapping("/show")
public ModelAndView test() {
return new ModelAndView("redirect:" + buildAdminRedirectUrl("/sample"));
}
/*
* springのredirectはdefaultでhttp
* 環境ごとのredirectURLを作成するメソッド
*/
public String buildAdminRedirectUrl(String url) {
return UriComponentsBuilder.fromUriString(redirectUrlProperties.getUrl() + url).toUriString();
}
}
application.yml
spring:
redirect:
url: https://localhost
RedirectUrlProperties.java
@Getter
@Setter
@ConfigurationProperties(prefix= "spring.redirect")
public class RedirectUrlProperties {
private String url;
}
ここまでredirect
について記載したが、内部メソッドを叩きたいだけならforward
を使うことも検討する。
ただし、forward
はURLは変わらないのでその辺も含めて適しているか検証が必要。
(redirectは再度リクエストを投げるが、fowardは内部で処理するためリクエストは最初の1回だけ)
以下を参考にさせていただきました。
https://qiita.com/rubytomato@github/items/8d132dec042f695e50f6