为了账号安全,请及时绑定邮箱和手机立即绑定

jdbcRealm 权限认证不了; 开关也打开了,sql语句在工具里验证过,也没错; 权限就是不行; 登录和角色都没问题

@Test

public void testJdbc() {

DefaultSecurityManager securityManager = new DefaultSecurityManager();

JdbcRealm realm = new JdbcRealm();

// JdbcRealm要把数据源设上

realm.setDataSource(dataSource);

// 要查权限,则要打开开关; 因为默认是关闭的

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);

// 自定义权限查询

// 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("管理员");

// 权限认证  <要先打开认证权限的开关>

subject.checkPermission("product:manager");

System.out.println("是否认证过:"+subject.isAuthenticated());

}


正在回答

3 回答

忽然看到了和你的差距:我的什么注释都没写,你的写的一清二楚,我的学习方法不对啊

1 回复 有任何疑惑可以回复我~
#1

sunbohan00

好的方法确实需要借鉴,但并不是全篇而论,注释这个东西,如果初学者便于自己记住,或者为了日后看了还知道什么含义,最好加上,熟练的话,写不写即可,如果是在公司项目组中,关键步骤写上注释就好。
2018-12-19 回复 有任何疑惑可以回复我~

谢谢,我试试看;

0 回复 有任何疑惑可以回复我~

String pSql = "select permission from testrole where user_name = ?";

这里写错了哦, 查询条件是role_name  , 可以参考一下JdbcRealm源码

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

jdbcRealm 权限认证不了; 开关也打开了,sql语句在工具里验证过,也没错; 权限就是不行; 登录和角色都没问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信