gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:37:36 24 4
gpt4 key购买 nike

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

目前我实现的源代码是这样的: Unable to @Inject my DAO in a Custom Apache Shiro AuthorizingRealm

有没有从数据库中完全加载[users](用户/密码)和[urls](角色,权限)的例子?我似乎无法在任何地方找到它。我现在正在寻找它 1 周。

最佳答案

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

shiro.ini

[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() 为空,则需要更多编码。如果有人需要整个代码,请告诉我。

关于jsf - 配置 Apache Shiro 以从 JPA 实体完全加载 [urls] 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22368438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com