subject 獲取登入使用者資訊
阿新 • • 發佈:2018-11-26
shiro 管理登入,獲取登入資訊的方式常用的是:
Subject sub = SecurityUtils.getSubject();
Object obj = sub.getPrincipal();
這裡的 obj 是字串,還是某個實體,取決於 ShiroRealm 類的設定值,程式碼如下:
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("獲取登入者資訊-->MyShiroRealm.doGetAuthenticationInfo()"); UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; String userS = token.getUsername(); User user = userService.findByName(userS); if (user != null) { LoginInfo info = new LoginInfo(); info.setName(user.getName()); info.setLoginId(user.getId); return new SimpleAuthenticationInfo(info, user.getPassword(), getName()); } return null; }
如果像上面這樣設定,讀取登入資訊就是
LoginInfo login = (LoginInfo) SecurityUtils.getSubject().getPrincipal();
如果設定登入資訊的地方如下:
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("獲取登入者資訊-->MyShiroRealm.doGetAuthenticationInfo()"); UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; String userS = token.getUsername(); User user = userService.findByName(userS); return new SimpleAuthenticationInfo(users, user.getPassword(), getName()); }
讀取登入資訊就是:
String loginName = (String) SecurityUtils.getSubject().getPrincipal();
提醒:
網路上面好多入門級的程式設計師,說話的時候要負責任,不要誤導別人,為了營造一個優良的開源環境或者社群,至少從自己開始做起吧。
後續,有空會更新關於自定義 shiro 的一些元件實現單點登入的方式