menu
書いてる野郎
orebike@gmail.com
ユーザー情報というのは画面表示として常に使うことになるとは思うのだが、 これを毎度 Model に添付するのは面倒なのでそれは暗黙で呼べるようにしておきたい。
Bean で Spring 管理になっているモノは Thymeleaf 側から @名前
で参照可能になっている。
確認のため AuthUser を拡張してこのようにする。
名前を付け加える
@Component @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) public class AuthUser { private boolean loginFlg = false; private String name = ""; public boolean isLoginFlg() { return loginFlg; } public void setLoginFlg(boolean loginFlg) { this.loginFlg = loginFlg; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
ログインできたと想定して名前を入れる。
@Controller @RequestMapping("/login") public class LoginController extends BaseController{ @RequestMapping("") @NoAuth public String index() { return "login/index"; } @RequestMapping("/doLogin") @NoAuth public String doLogin() { this.refreshSession(); authUser.setLoginFlg(true); authUser.setName("Yamada"); return "redirect:/hoge"; } @RequestMapping("/doLogout") @NoAuth public String doLogout() { this.refreshSession(); authUser.setLoginFlg(false); return "redirect:/login"; } }
AuthUser は Spring 管理で Scope は Session になっているので Thymeleaf 側からこのように呼び出せる。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <title>hoge</title> <meta name="description" content=""> <link rel="stylesheet" type="text/css" href="/css/hoge/index.css" /> </head> <body> <h1>hoge</h1> [[${@authUser.name}]] <!-- This! --> <ul> <li><a href="/piyo">piyo</a></li> <li><a href="/login/doLogout">logout</a></li> </ul> </body> </html>
ログイン後に Yamada
が表示されていることがわかる。