代码之家  ›  专栏  ›  技术社区  ›  BBacon

配置Apache Shiro以从JPA实体完全加载[urls]部分

  •  3
  • BBacon  · 技术社区  · 12 年前

    我似乎找不到从JPA对象加载[users]和[urls]的示例。 我只想在[main]部分使用shiro.ini。

    到目前为止,我所取得的成果的源代码如下: Unable to @Inject my DAO in a Custom Apache Shiro AuthorizingRealm

    是否有从数据库完全加载[users](用户/密码)和[urls](角色、权限)的示例?我似乎在任何地方都找不到。我找了一个星期了。

    1 回复  |  直到 9 年前
        1
  •  1
  •   BBacon    12 年前

    经过长时间的研究,我想出的“最佳”解决方案是:

    希罗维尼

    [main]
    jsfFilter = com.test.security.CustomAuthorizationFilter
    jsfFilter.loginUrl = /login.jsf
    
    [urls]
    /** = jsfFilter
    

    //您可以在这个过滤器中添加BalusC描述的过滤Ajax请求的方法。 自定义授权筛选器.java

    public class CustomAuthorizationFilter extends AuthorizationFilter {
    
    @Override
        public boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws IOException {
    
            HttpServletRequest httpRequest = (HttpServletRequest) request;
    
            if (!httpRequest.getRequestURI().startsWith(httpRequest.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
    
                Subject subject = SecurityUtils.getSubject();
    
                AuthenticatingSecurityManager authenticatingSecurityManager = ((AuthenticatingSecurityManager) SecurityUtils.getSecurityManager());
    
                PrincipalCollection principals = subject.getPrincipals();
                JPARealm jpaRealm = (JPARealm) authenticatingSecurityManager.getRealms().iterator().next();
                AuthorizationInfo authorizationInfo = jpaRealm.getAuthorizationInfo(principals);
    
                for (String permission : authorizationInfo.getStringPermissions()) {
                    if (pathsMatch(permission, request)) {
                        return true;
                    }
                }
    
            } else {
                return true;
            }
            return false;
        }
    }
    

    这个 pathsMatch(permission, request) 方法将尝试验证/比较接收到的字符串权限与用户尝试访问的路径。 此筛选器依赖于始终具有经过身份验证的用户。 如果 subject.getPrincipal() 为空,则需要更多编码。 如果有人需要完整的代码,请告诉我。

    推荐文章