小编cit*_*ess的帖子

AspectJ切入点用于带注释的PRIVATE方法

我想为使用特定注释注释的私有方法创建一个Pointcut.但是,当注释位于如下所示的私有方法时,不会触发我的方面.

@Aspect
public class ServiceValidatorAspect {
    @Pointcut("within(@com.example.ValidatorMethod *)")
    public void methodsAnnotatedWithValidated() {
}

@AfterReturning(
            pointcut = "methodsAnnotatedWithValidated()",
            returning = "result")
    public void throwExceptionIfErrorExists(JoinPoint joinPoint, Object result) {
         ...
}
Run Code Online (Sandbox Code Playgroud)

服务接口

public interface UserService {

    UserDto createUser(UserDto userDto);
}
Run Code Online (Sandbox Code Playgroud)

服务实施

    public class UserServiceImpl implements UserService {

       public UserDto createUser(UserDto userDto) {

             validateUser(userDto);

             userDao.create(userDto);
       }

       @ValidatorMethod
       private validateUser(UserDto userDto) {

            // code here
       }
Run Code Online (Sandbox Code Playgroud)

但是,如果我将注释移动到公共接口方法实现createUser,则会触发我的方面.我应该如何定义切入点或配置我的方面以使我的原始用例工作?

aop spring aspectj spring-aop

9
推荐指数
1
解决办法
2万
查看次数

如果ap:对话框打开,如何在backing bean中确定?

如果在浏览器中打开了Primefaces对话框,有没有办法告诉后备bean?

这就是我在facelet上显示一个对话框的方法:

<p:menuitem value="Click me" oncomplete="dialogWidget.show();" />
Run Code Online (Sandbox Code Playgroud)

当我从查找对话框对象ViewRoot,都dialog.isVisible()dialog.isInView()返回true,即使未所示的对话框.或者,是否有一个标志告诉我主窗口是否显示为灰色(这是在显示模式对话框时发生的)?

背景信息:我正在试图找出显示FacesMessages的位置.我的应用程序可以在两个位置显示消息:主窗口或对话框弹出窗口.打开模式对话框时,我希望消息仅显示在对话框中.如果没有显示对话框,我希望消息显示在主窗口中.

primefaces jsf-2

7
推荐指数
1
解决办法
4182
查看次数

Log4j:以编程方式更改日志级别,适用于要创建的记录器

我在我的代码中声明了记录器,如下所示:

Logger logger = LoggerFactory.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

我希望能够在运行时以编程方式更改记录器的日志级别.我已经尝试通过LogManager迭代存储库中的记录器,但它只将新的日志级别应用于在代码中实例化的记录器.如果创建了新的记录器实例,则它不使用新的日志级别.我的要求是我的Web应用程序中的日志级别需要通过管理GUI进行配置,这个新的日志级别需要应用于我的代码中的所有记录器(不包括第三方库日志记录,例如JSF,Spring,Hibernate等) .

这就是我现在正在做的,它不符合我的要求,因为它没有将日志级别应用于新实例化的记录器:

Enumeration<Logger> currentLoggers = LogManager.getCurrentLoggers();
while(currentLoggers.hasMoreElements()) {
    Logger logger = currentLoggers.nextElement();
    if (StringUtils.startsWith(logger.getName(), "com.my.company")) {
        logger.setLevel(logLevel);
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Log4j 1.2.17.

java log4j

7
推荐指数
1
解决办法
1万
查看次数

用于获取单个树中所有节点的 JPA 查询

我有存储在数据库表中的树结构。该表可以存储多棵树。我需要一个查询来返回单个树中的所有节点。我使用以下站点作为资源,但其中的查询会将所有树的所有节点加载到 PersistenceContext 中(这不是加载整个表吗?)。我不想这样做,我只想加载一棵树。我如何做到这一点?

我使用 JPA 2 和 Hibernate 作为提供程序。

OpenJPA 1.2.x 使用 JPQL 选择树结构
http://www.tikalk.com/java/load-a-tree-with-jpa-and-hibernate#comment-1821

[更新] 根据@bennidi 的建议,我想知道我是否可以使用这样的东西:

@Entity
public class Node {

    private String name;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "rootId")
    private Node root;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "parentId")
    private Node parent;

    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @OrderBy("name")
    private List<Node> children = new LinkedList<Node>();
}
Run Code Online (Sandbox Code Playgroud)

JPQL 查询:

select distinct n from Node n left join fetch n.children where n.rootId = ROOT_ID
Run Code Online (Sandbox Code Playgroud)

我有虽然问题,我应该创建一个第二个表,以保持在类似于父子关系 …

tree hibernate jpa-2.0

5
推荐指数
1
解决办法
8735
查看次数

使用Spring Security进行预身份验证/单点登录

我正在开发两个Web应用程序,其中一个是服务器应用程序,另一个是客户端应用程序,两者都使用Spring Security.我的用例是这样的,用户登录服务器应用程序后,用户可以从服务器应用程序内的链接访问客户端应用程序.由于用户在点击这些链接(我的部分要求)时不必再次登录,因此我决定使用类似于Single SignOn的策略,以便将其身份验证信息从服务器应用转发到客户端应用.

在客户端应用程序上,我使用Spring Security RequestHeaderAuthenticationFilter来查找由服务器应用程序设置的自定义请求标头.

  1. 如果找到此自定义标头,是否必须进一步验证此请求是否值得信任?在Spring的预身份验证文档中, RequestHeaderAuthenticationFilter不执行任何身份验证,并假定请求来自SM_USER属性中指定的用户.我如何确保请求是真实的?

  2. 如何使用http请求中的自定义标头将用户从一个应用程序发送到另一个应用程序?重定向请求不起作用,因为标头信息将丢失.转发不起作用,因为转发的请求不通过客户端应用程序上配置的Spring Security过滤器,因此请求永远不会"经过身份验证",也不会创建会话.

spring-security single-sign-on pre-authentication

3
推荐指数
1
解决办法
1万
查看次数