小编mer*_*ike的帖子

在Java中反序列化不受信任的数据有什么安全影响?

反序列化不受信任的数据是否安全,前提是我的代码不对反序列化对象的状态或类进行假设,或者仅仅反序列化的行为是否会引起不希望的操作?

(威胁模型:攻击者可以自由修改序列化数据,但这就是他所能做的)

java security serialization

11
推荐指数
1
解决办法
3301
查看次数

Servlet-spec:<context-param> vs weblog中的<env-entry>?

为什么Servlet规范定义了两种不同的方式(上下文参数和环境条目)来为Web应用程序提供配置参数?

这些方法各自的优点是什么(什么时候应该优先选择)?

servlets jndi context-param

10
推荐指数
1
解决办法
3006
查看次数

JSF:如何在按下回车键时提交表单?

这似乎是一个简单的要求,但我还没有找到一个简单的解决方案:

在JSF 1.2/Richfaces 3.3 webapp中,我有一个表单,其中包含各种类型的输入组件,后跟一个<a4j:commandButton>和一个<h:commandButton>.前者重置表单,第二个对输入的数据执行一些操作.

我的目标是在用户输入数据时按下回车键时触发此操作.我怎样才能做到这一点?

编辑:一般来说,<h:commandButton>每个人有一个以上<form>.我想指定一个特定的默认操作.此外,我希望解决方案与AJAX(我们广泛使用)相得益彰.

javascript jsf

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

是否需要运行时类路径中的注释类文件?

如果使用注释对类进行批注,那么该批注的定义是否必须位于运行时类路径中才能使用该类?例如,给出注释

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Retention;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Component {}
Run Code Online (Sandbox Code Playgroud)

我可以执行该程序吗?

@Component
public class Test {
    public static void main(String[] args) {
        System.out.println("It worked!");
    }
}
Run Code Online (Sandbox Code Playgroud)

没有在类路径中的Component.class?(在我的测试中,我可以,但这个行为是由规范定义的吗?)

我问,因为使用库中的注释是否会创建对该库的依赖性存在冲突.

java annotations

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

如果没有未使用的类,JVM会抛出吗?

考虑该计划:

public class Test {

    public static void main(String[] args) {
        if (Arrays.asList(args).contains("--withFoo")) {
            use(new Foo());
        }
    }

    static void use(Foo foo) {
        // do something with foo
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在没有参数的情况下启动程序,那么运行时类路径中是否需要Foo?

研究

报告链接错误时,Java语言规范相当模糊:

该规范允许实现灵活性,以便何时发生链接活动(以及由于递归,加载),只要遵循Java编程语言的语义,在初始化之前完全验证和准备类或接口,并且在链接期间检测到的错误被抛出到程序中的某个点,在该点上程序可能需要链接到错误中涉及的类或接口.

我的测试表明只有在我实际使用时才会抛出LinkageErrors Foo:

$ rm Foo.class

$ java Test

$ java Test --withFoo

Exception in thread "main" java.lang.NoClassDefFoundError: Foo
        at Test.main(Test.java:11)
Caused by: java.lang.ClassNotFoundException: Foo
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java jvm linker-errors

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

Java的解压缩实用程序性能不佳

我注意到与使用WinZip等本机工具相比,Java中的解压缩工具非常慢.

是否有可用于Java的第三方库更高效?开源是首选.

编辑

这是使用Java内置解决方案vs 7zip的速度比较.我在原始解决方案中添加了缓冲输入/输出流(感谢Jim,这确实产生了很大的不同).

Zip文件大小:800K Java解决方案:2.7秒7Zip解决方案:204毫秒

以下是使用内置Java解压缩的修改代码:

/** Unpacks the give zip file using the built in Java facilities for unzip. */
@SuppressWarnings("unchecked")
public final static void unpack(File zipFile, File rootDir) throws IOException
{
  ZipFile zip = new ZipFile(zipFile);
  Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries();
  while(entries.hasMoreElements()) {
    ZipEntry entry = entries.nextElement();
    java.io.File f = new java.io.File(rootDir, entry.getName());
    if (entry.isDirectory()) { // if its a directory, create it
      continue;
    }

    if (!f.exists()) {
      f.getParentFile().mkdirs();
      f.createNewFile();
    }

    BufferedInputStream bis = new BufferedInputStream(zip.getInputStream(entry)); …
Run Code Online (Sandbox Code Playgroud)

java unzip

8
推荐指数
2
解决办法
9610
查看次数

java编译器奇怪:在同一个类中声明的字段,但"不可见"

eclipse编译器拒绝编译以下代码,声明字段s不可见.(IBM的Aspect J编译器也拒绝,说"无法解决")为什么会这样?

public class Test {

    String s;

    void foo(Object o) {
        String os = getClass().cast(o).s;
    }
}
Run Code Online (Sandbox Code Playgroud)

Java语言规范声明:

否则,我们说存在默认访问权限,只有在声明类型的包中发生访问时才允许访问.

我理解它的方式,该字段在同一个编译单元中声明和访问,因此在同一个包中,因此应该是可访问的.

更奇怪的是,从增加一个垂头丧气? extends Test,以Test使现场可见,即下面的代码编译:

public class Test {

    String s;

    void foo(Object o) {
        Test t = getClass().cast(o);
        String os = t.s;
    }
}
Run Code Online (Sandbox Code Playgroud)

我偶然发现了编译器错误,或者误解了Java规范吗?

编辑: 我现在在另一台电脑上.在这里,javac接受代码,但eclipse仍然没有.这台机器上的版本:

Eclipse平台

版本:3.4.2构建ID:M20090211-1700

JDK 1.6.0

编辑2 确实,javac接受了代码.我通过运行ant build来测试,它使用了IBM的Ascpect J编译器......

java compiler-construction generics compiler-errors

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

Java术语:为什么编译时错误而不是编译时异常?

这可能听起来很尴尬......
但我不明白.

为什么我们有compile-time error而不是compile-time exception在java?

我的意思是说我们从不说compile-time exception.
我们倾向于说它compile-time error.

是否有任何具体原因?
欢迎任何建议......

谢谢 !

java exception-handling exception

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

在领域驱动设计中,一个事务可以修改多个聚合吗?

在“领域驱动设计:解决软件核心的复杂性”中,埃文斯定义了

骨料是相关联的对象的簇,我们把作为数据更改的目的的单元。

显然,这意味着必须在单个事务中更新聚合。

但是,事务是否必须只更新单个聚合?如果是这样,为什么?

我的研究

我问是因为,在“实施领域驱动设计”,第 360 页,弗农写道:

不得在同一事务中修改引用聚合和被引用聚合。在单个事务中只能修改一个或另一个。

但没有给出这个规则的理由。

我知道如果业务规则需要单个事务,这表示隐藏的不变量,这将要求实体成为同一聚合的一部分。但是,如果业务不在乎,而开发人员只是觉得方便怎么办?

在第 437 页,弗农还写道:

注意不要仅仅因为它在单元测试环境中工作就过度使用在单个事务中提交对多个聚合的修改的能力。如果您不小心,在开发和测试中运行良好的方法可能会由于并发问题而在生产中严重失败。

那些并发问题是什么?

java domain-driven-design transactions aggregateroot

6
推荐指数
1
解决办法
661
查看次数

Lambda类型推断推断出lambda不抛出的异常类型

代码

class TestException extends Exception {

}

interface Task<E extends Exception> {
    void call() throws E;
}

public class TaskPerformer {

    /** performs a task in the proper context, rethrowing any exceptions the task declares */
    private <E extends Exception> void perform(Task<E> task) throws E {
        beforeTask();
        try {
            task.call();
        } finally {
            afterTask();
        }
    }

    private void afterTask() {
        // implementation elided (does not matter)
    }

    private void beforeTask() {
        // implementation elided (does not matter)
    }

    public static …
Run Code Online (Sandbox Code Playgroud)

java eclipse lambda type-inference java-8

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