gpt4 book ai didi

Spring AOP 和 apache shiro 配置。未扫描注释

转载 作者:行者123 更新时间:2023-12-04 06:18:55 25 4
gpt4 key购买 nike

我一直在努力解决需要 AOP 知识的配置。

我必须承认 AOP 是我试图获得一段时间但没有成功的那部分。
似乎我的 shiro 注释没有被扫描,因此被忽略了。

我试过使用 shiro 1.1.0+ maven3+spring 3.0.5.RELEASE,休眠 3.6.1.Final 和 ZK 5.0.6。
我让我的 hibernaterealm 工作,与数据库交谈,我让身份验证工作,我成功(我相信)加载了角色和权限。

所以为了测试授权方面我在我的代码中的某个地方:

  Subject currentUser = SecurityUtils.getSubject();
if (!currentUser.isPermitted("businessaccount:list")) {
throw new AuthorizationException("User not authorized");
}

它工作正常。
所以我知道我的权限已加载。我使用注释将它放在实现类中对我来说很方便,因为我不打算首先将接口(interface)与扩展 ZK GenericForwardController 的 Controller 类一起使用。

我看过这个 bug我决定尝试使用一个带有@RequiresPersmissions 方法的接口(interface)。

显然它仍然无法正常工作,因为它可以访问未经授权的主题。我的日志中没有错误。也许我做错了这里是代码片段:
@Component("layouteventhandler")
public class LayoutEventHandlerImpl extends GenericForwardComposer implements LayoutEventHandler {

Logger logger = Logger.getLogger(LayoutEventHandlerImpl.class);
Menuitem logout;

//...


@Override
public void onClick$pAccounts() {
try {
execution.sendRedirect("/accounts/personal/list");
} catch (Exception ex) {
logger.info("Error redirecting to personal accounts", ex);
}
}


@Override
public void onClick$bAccounts() {
try {
execution.sendRedirect("/accounts/business/list");
} catch (Exception ex) {
logger.info("Error redirecting to business accounts", ex);
}
}
//.....
}

它的界面:
public interface LayoutEventHandler {

@RequiresPermissions(value="personalaccount:list")
public void onClick$pAccounts();

@RequiresPermissions(value="businessaccount:list")
public void onClick$bAccounts();
//.....

}

这是我的 shiro 应用程序上下文
<bean id="hibernateRealm" class="com.personal.project.admin.webapp.security.DatabaseRealm" />
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="hibernateRealm" />
</bean>

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor">
<!-- <property name="proxyTargetClass" value="true" />-->
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>

<!-- Secure Spring remoting: Ensure any Spring Remoting method invocations can be associated
with a Subject for security checks. -->
<bean id="secureRemoteInvocationExecutor" class="org.apache.shiro.spring.remoting.SecureRemoteInvocationExecutor">
<property name="securityManager" ref="securityManager"/>
</bean>
<!-- ... -->

里面有我应该做的事情吗?感谢阅读和帮助

最佳答案

我不认识 Shiro,但我猜您已经在实现接口(interface)的 bean 类上添加了注释,然后您将它们代理用于安全性、事务和/或其他方面。发生这种情况时,返回的对象是 JDK 动态代理,它不是 bean 的具体类的实例,只是它实现的接口(interface)的实例。因此,任何依赖于具体类中注释的注释扫描都不会找到它们。

关于Spring AOP 和 apache shiro 配置。未扫描注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859432/

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