jdbcRealm 權(quán)限認證不了; 開關(guān)也打開了,sql語句在工具里驗證過,也沒錯; 權(quán)限就是不行; 登錄和角色都沒問題
@Test
public void testJdbc() {
DefaultSecurityManager securityManager = new DefaultSecurityManager();
JdbcRealm realm = new JdbcRealm();
// JdbcRealm要把數(shù)據(jù)源設(shè)上
realm.setDataSource(dataSource);
// 要查權(quán)限,則要打開開關(guān); 因為默認是關(guān)閉的
realm.setPermissionsLookupEnabled(true);
// 自定義查詢認證的sql語句, 對照著原碼里的格式來寫
String sql = "select admin_password from admin where admin_name = ?";
realm.setAuthenticationQuery(sql);
// 自定義角色查詢
String roleSql = "select rolename from role r, admin a where r.roleid = a.roleid and a.admin_name = ?";
realm.setUserRolesQuery(roleSql);
// 自定義權(quán)限查詢
// String pSql = "select p.pname from admin a, permission p, rolepermission r where a.roleId = r.roleId and r.permissionId = p.permissionId and a.admin_name = ?";
String pSql = "select permission from testrole where user_name = ?";
realm.setPermissionsQuery(pSql);
securityManager.setRealm(realm);
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("admin", "1234");
// 認證
subject.login(token);
// 角色認證
subject.checkRole("管理員");
// 權(quán)限認證? <要先打開認證權(quán)限的開關(guān)>
subject.checkPermission("product:manager");
System.out.println("是否認證過:"+subject.isAuthenticated());
}
2018-12-03
忽然看到了和你的差距:我的什么注釋都沒寫,你的寫的一清二楚,我的學(xué)習(xí)方法不對啊
2018-11-06
謝謝,我試試看;
2018-11-05
String pSql = "select permission from testrole where user_name = ?";
這里寫錯了哦,?查詢條件是role_name? ,?可以參考一下JdbcRealm源碼