色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

shiro中的principal怎樣理解

錢艷冰2年前15瀏覽0評論

shiro中的principal怎樣理解?

pricipal是一個Object,就是我們的帶有username屬性的實體對象

詳細解釋如下:

在登錄的方法中,調用了subject.login(token)后,還要手動利用principal和realmName構造SimpleAuthenticationInfo對象,其實這里的pricipal是一個Object,就是我們的帶有username屬性的實體對象,然后將SimpleAuthenticationInfo對象存放在session中。 代碼如下:

try { subject.login(token); //獲取realmSecurityManager對象,其包含了很多信息,比如配置文件里面的數據 RealmSecurityManager realmSecurityManager = (RealmSecurityManager) securityManager; Collection<Realm> collection = realmSecurityManager.getRealms(); if (collection!=null && collection.size()>0){ iterator iterator = collection.iterator(); while (iterator.hasNext()){ Realm realm = (Realm)iterator.next(); //得到默認的數據源名稱,雖然默認的為iniRealm,也可以通過程序獲得 String realmName = realm.getName(); //自定義的實體對象 User user = new User(); user.setUsername(username); user.setPassword(password); //得到SimpleAuthenticationInfo對象 SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,password,realmName); //通過源碼分析在調用subject.login(token)后,會通過SubjectContext來保存到session,所以就直接復用了源碼(DefaultSecurityManager類中) SubjectContext subjectContext = new DefaultSubjectContext(); subjectContext.setAuthenticated(true); subjectContext.setAuthenticationToken(token); subjectContext.setAuthenticationInfo(info); if (subject != null) { subjectContext.setSubject(subject); } //此方法中進行保存 realmSecurityManager.createSubject(subjectContext); } } }catch (UnknownAccountException e){ error = "用戶名不存在"; }catch (IncorrectCredentialsException e){ error = "用戶名或密碼錯誤"; }catch (AuthenticationException e){ error = "其他錯誤"+e.getMessage(); }

最后結果是在頁面上標簽<shiro:principal property="username" /> 能正確顯示結果,說明此方法可行。

java shiro配置,shiro中的principal怎樣理解