概要
Spring Securityの公式サイトに掲載されている、下記のソースが一般に知られているものではないと思ったので、勝手に補足してみました。
一応、初心者向けの説明のつもりです。
package com.example.securingweb;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfig implements WebMvcConfigurer {
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
要はこういうこと
先に書いておきますが、上記のコードは下記のコードと同じものと思っていただいて結構です。(実際はチョット違う)
package com.example.securingweb;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Controllers {
@RequestMapping({"/home","/"})
public String requestHome(){
return "home";
}
@RequestMapping("/hello")
public String requestHello(){
return "hello";
}
@RequestMapping("/login")
public String requestLogin(){
return "login";
}
}
公式サイトのコードにWebMvcConfigurer
とかaddViewController
とかsetViewName
とか、色々知らないメソッドやインターフェースがあります。気にしなくて良いです。実際の開発で、エンドポイントがテンプレートを返すだけということは、あり得ないからです。
@Configuration
アノテーションが公式サイトのソースについているので、Springを起動した際にMvcConfig
は実行されます。
一方で、@Controller
アノテーションをつける一般的なやり方では、クライアントからリクエストが飛んできた際に実行されます。ここが違いの1つ。
@Configuration
アノテーションを使うコードと、@Controller
アノテーションを使うコード両方を組み込むと、@Controller
アノテーションの方が優先されます。
これは単純に先ほど説明した通り、Springを起動した際にMvcConfig
は実行され、クライアントからリクエストが飛んできた際に実行されるからです。
つまり両方書いても、ちゃんと動きます。コード的には無駄がありますが。