小编TTa*_*Tar的帖子

你如何在代码中隐藏密钥?

我有一段时间想知道一些软件如何隐藏秘密密钥,以至于无法轻易发现它们.举几个例子:

  • DVD播放器软件隐藏了CSS密钥
  • 带序列号/注册码的软件隐藏用于验证序列号的密钥/哈希值

显然,这些程序不仅仅是在字节[]中使用密钥,因为这样可以轻松窃取密钥并生成自己的序列号等.

使用了哪些策略来隐藏这些键,以便无法轻易找到它们?

encryption obfuscation

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

Spring FactoryBean和范围一起工作

我想将FactoryBeans和范围一起使用.具体来说,我希望FactoryBean创建并返回的对象放在指定的(可能是自定义的)范围内.问题是执行以下操作:

<bean class="x.y.z.TestFactoryBean" scope="test" />
Run Code Online (Sandbox Code Playgroud)

FactoryBean本身的结果是作用域,并且对工厂创建的对象有一些不可预测的行为.我明白为什么会这样; 工厂本身是一流的春季管理的豆,并有自己的生命周期.但是,我找不到一种方法来指定从工厂返回的对象本身应该作用域.

另一方面,这正是我想要的(只要TestFactoryBean不实现FactoryBean接口):

<bean class="x.y.z.TestFactoryBean" name="testFactory">
<bean class="x.y.z.TestBean" factory-bean="testFactory" 
      factory-method="getObject" scope="test" />
Run Code Online (Sandbox Code Playgroud)

所以真正的问题是,我如何使Spring的行为与上面的第二个例子一样,但是使用真正的FactoryBeans?

java spring

8
推荐指数
1
解决办法
5997
查看次数

设计:当域对象和服务对象之间的界限不明确时

这个问题的核心是一个设计问题.我将使用Java/Java EE示例来说明问题.

考虑一个使用JPA构建的Web邮件应用程序,用于服务层的持久性和EJB.假设我们的EJB中有一个服务方法,如下所示:

public void incomingMail(String destination, Message message) {
    Mailbox mb = findMailBox(destination); // who cares how this works
    mb.addMessage(message);
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一种合理的商业方法.据推测,邮箱对象仍将被附加,它将无缝地将更改保存回数据库.毕竟,这是透明持久性的承诺.

邮箱对象将具有此方法:

public void addMessage(Message message) {
    messages.add(message);
}
Run Code Online (Sandbox Code Playgroud)

这里变得复杂 - 假设我们想要其他邮箱类型.假设我们有一个自动响应发件人的AutoRespondingMailbox,以及一个HelpDeskMailbox,它会在收到每封电子邮件时自动打开一个帮助台票证.

自然要做的是扩展Mailbox,其中AutoRespondingMailbox具有以下方法:

public void addMessage(Message message) {
    String response = getAutoResponse();
    // do something magic here to send the response automatically
}
Run Code Online (Sandbox Code Playgroud)

问题是我们的Maibox对象及其子类是"域对象"(在本例中,也是JPA实体).Hibernate人(以及许多其他人)宣扬非依赖域模型 - 即不依赖于容器/运行时提供的服务的域模型.这种模型的问题是AutoRespndingMailbox.addMessage()方法无法发送电子邮件,因为它无法访问,例如,JavaMail.

HelpDeskMailbox会出现完全相同的问题,因为它无法访问WebServices或JNDI注入以与HelpDesk系统进行通信.

因此,您不得不将此功能放在服务层中,如下所示:

public void incomingMail(String destination, Message message) {
    Mailbox mb = findMailBox(destination); // who cares how this works
    if (mb instanceof …
Run Code Online (Sandbox Code Playgroud)

java oop domain-driven-design

7
推荐指数
2
解决办法
741
查看次数