开发者社区> 问答> 正文

shiro + jfinal, 重写shiro 的 authc 过滤器后,过滤器无效 - 服务报错

如题

shiro.ini 配置如下

[main]

#自定义authc 过滤器
authc = com.zg.vmfun.kit.shiro.CaptchaFormAuthenticationFilter
#没有认证(登录)跳转
authc.loginUrl = /admin
#认证成功后跳转
authc.successUrl = /admin/abcMain
#授权失败后跳转
perms.unauthorizedUrl = /admin

[urls]
/admin/* = authc

*************************************************

结果是 不执行CaptchaFormAuthenticationFilter,跳转至 /admin

求解。

展开
收起
montos 2020-06-02 23:03:46 600 0
1 条回答
写回答
取消 提交回答
  • 解决么了,IBM的文章“ http://www.ibm.com/developerworks/cn/java/j-lo-shiro/” 是错的。在

    FormAuthenticationFilter处,认证方法错误。至少再shiro1.2.2版本下
    ######

    jfinal-drampie  动态数据库权限

    public class MyJdbcAuthzService implements JdbcAuthzService {
      @Override
      public Map<String, AuthzHandler> getJdbcAuthz() {
        //加载数据库的url配置
        Map<String, AuthzHandler> authzJdbcMaps = new HashMap<String, AuthzHandler>();
    //    Map<String, AuthzHandler> authzJdbcMaps = new TreeMap<String, AuthzHandler>(
    //        new Comparator<String>() {
    //          public int compare(String k1, String k2) {
    //            return new Integer(k2.length()).compareTo(k1.length());
    //          }
    //
    //        });
        //遍历角色
        List<Role> roles = Role.dao.findAll();
        List<Permission> permissions = null;
        for (Role role : roles) {
          //角色可用
          if (role.getDate("daleted_at") == null) {
            permissions = Permission.dao.findByRole("", role.get("id"));
            //遍历权限
            for (Permission permission : permissions) {
              //权限可用
              if (permission.getDate("daleted_at") == null) {
                if (permission.getStr("url") != null && !permission.getStr("url").isEmpty()) {
                  authzJdbcMaps.put(permission.getStr("url"), new JdbcPermissionAuthzHandler(permission.getStr("value")));
                }
              }
            }
          }
        }
        return authzJdbcMaps;
      }
    }
    --create role--
    
    INSERT INTO sec_role(id,name, value, intro, pid,left_code,right_code,created_at)
    VALUES (sec_role_id_seq.nextval,'超级管理员','R_ADMIN','',0,1,8, current_timestamp),
           (sec_role_id_seq.nextval,'系统管理员','R_MANAGER','',1,2,7,current_timestamp),
           (sec_role_id_seq.nextval,'会员','R_MEMBER','',2,3,4,current_timestamp),
           (sec_role_id_seq.nextval,'普通用户','R_USER','',2,5,6,current_timestamp);
    
    --create permission--
    INSERT INTO sec_permission(id, name, value, url, intro,pid,left_code,right_code, created_at)
    VALUES (sec_permission_id_seq.nextval,'管理员目录','P_D_ADMIN','/admin/**','',0,1,6,current_timestamp),
           (sec_permission_id_seq.nextval,'角色权限管理','P_ROLE','/admin/role/**','',1,2,3,current_timestamp),
           (sec_permission_id_seq.nextval,'用户管理','P_USER','/admin/user/**','',1,4,5,current_timestamp),
           (sec_permission_id_seq.nextval,'会员目录','P_D_MEMBER','/member/**','',0,9,10,current_timestamp),
           (sec_permission_id_seq.nextval,'普通用户目录','P_D_USER','/user/**','',0,11,12,current_timestamp);
    //如果系统不重启需要加载新权限到全局过滤
                ShiroKit.addJdbcAuthz(authority.getStr("url"),authority.getStr("auth_key"));

    2020-06-02 23:03:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载