jdbcRealm 權(quán)限認(rèn)證不了; 開(kāi)關(guān)也打開(kāi)了,sql語(yǔ)句在工具里驗(yàn)證過(guò),也沒(méi)錯(cuò); 權(quán)限就是不行; 登錄和角色都沒(méi)問(wèn)題
@Test
public void testJdbc() {
DefaultSecurityManager securityManager = new DefaultSecurityManager();
JdbcRealm realm = new JdbcRealm();
// JdbcRealm要把數(shù)據(jù)源設(shè)上
realm.setDataSource(dataSource);
// 要查權(quán)限,則要打開(kāi)開(kāi)關(guān); 因?yàn)槟J(rèn)是關(guān)閉的
realm.setPermissionsLookupEnabled(true);
// 自定義查詢認(rèn)證的sql語(yǔ)句, 對(duì)照著原碼里的格式來(lái)寫
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");
// 認(rèn)證
subject.login(token);
// 角色認(rèn)證
subject.checkRole("管理員");
// 權(quán)限認(rèn)證? <要先打開(kāi)認(rèn)證權(quán)限的開(kāi)關(guān)>
subject.checkPermission("product:manager");
System.out.println("是否認(rèn)證過(guò):"+subject.isAuthenticated());
}
2018-12-03
忽然看到了和你的差距:我的什么注釋都沒(méi)寫,你的寫的一清二楚,我的學(xué)習(xí)方法不對(duì)啊
2018-11-06
謝謝,我試試看;
2018-11-05
String pSql = "select permission from testrole where user_name = ?";
這里寫錯(cuò)了哦,?查詢條件是role_name? ,?可以參考一下JdbcRealm源碼