Google reCAPTCHA:如何在服务器端获取用户响应和validation

我正在做一个Java(JSP + Servlet)Web应用程序(我知道这个问题与技术无关)。 我希望使用最新的Goolge reCAPTCHA服务。 我正在玩这里找到的Goolge reCAPTCHA示例: https://developers.google.com/recaptcha/docs/display#config reCAPTCHA demo: Simple page 我能够看到显示的recaptcha图像如下: 当我检查“我不是机器人”时,我得到以下信息: 如您所见,有一个validation按钮,根据我的测试,用户响应会发送给Google进行validation。 如何获取用户响应,以便我可以在自己的后端代码中validation用户响应(如Google建议的https://developers.google.com/recaptcha/docs/verify )。 g-recaptcha-response POST parameter when the user submits the form on your site 在服务器端,我可以通过单击“提交”按钮,仅在首先使用Google成功validation用户时从参数“g-recaptcha-response”获取用户输入。 否则,“g-recaptcha-response”在服务器端是空白的。 这意味着只有在客户端validation成功后才能进行服务器端validation。 如果是这样,在服务器端进行另一次validation有什么意义,这是Google reCAPTHA提供的选项? 我错过了什么吗?

Spring 3.0中的多个属性文件

我正在开发一个包含多个独立模块的项目,每个模块都有自己的应用程序上下文属性文件。 我希望能够加载所有这些属性,以便它们可以用于Spring的占位符解析。 之前的问题已经提到了这一点,这里有一篇很好的博客文章描述了如何在每个上下文中使用PropertyPlaceholderConfigurer,按优先级排序它们并将ignoreUnresolveablePlaceholders设置为true,以便这些属性文件可以相互交叉引用而不会爆炸。 但是,这并没有解决我的问题,因为我也希望能够使用我正在加载的属性来进行一些自定义占位符解析(从我正在解析的一些yaml文件)。 这需要使用PropertyPlaceholderHelper,它需要将Properties对象作为参数。 据我所知,潜在的解决方案是: 1)将所有属性文件合并到一个属性bean中。 然后可以使用它来创建PropertyPlaceholderConfigurer(用于Spring的内部占位符解析)并与PropertyPlaceholderHelper一起使用(用于我自己的占位符解析) 2)以某种方式配置PropertyPlaceholderHelper以使用PropertyPlaceholderConfigurers持有的属性集及其分层排列,如果我继续并遵循该博客post的建议。 不幸的是,我无法弄清楚如何做其中任何一个。 任何帮助将不胜感激! PS看起来Spring 3.1在这里会有很大的帮助……不幸的是我们还没有准备好转向它,所以我仍然需要一个解决方案来帮助我! ****编辑**** 谢谢你到目前为止的答案。 它们是很好的答案,但不幸的是我不会帮助我(因为我们之前没有提到这一点而道歉)我们目前正在将我们项目的核心模块与非核心模块分开。 这意味着核心模块及其应用程序上下文无法对属性文件的名称进行硬编码。 令人沮丧的是,Spring的类路径扫描似乎被打破了,所以“classpath *:*。properties”类型的通配符仅在构建单个模块时起作用,而不是顶层项目(我相信这是一个已知问题)。 问题是如何将非核心模块中定义的属性文件合并到核心模块中定义的现有属性文件中。 目前我正在使用BeanPostProcessor – 我只是想知道是否有更简单/更优雅的方法来做到这一点? 谢谢

Spring 3.1 Environment不适用于用户属性文件

我这样做.. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(context); xmlReader .loadBeanDefinitions(new ClassPathResource(“SpringConfig.xml”)); PropertySourcesPlaceholderConfigurer propertyHolder = new PropertySourcesPlaceholderConfigurer(); propertyHolder.setLocation(new ClassPathResource( “SpringConfig.properties”)); context.addBeanFactoryPostProcessor(propertyHolder); …… context.refresh(); 现在在我的@Configuration文件中,如果我这样做,我的SpringConfig.properties中的属性就不会被拾取… @Autowired private Environment env ….. env.getProperty(“my.property”) 但是,如果我使用,我会获得该属性 @Value(“${my.property}”) private String myProperty; 我甚至尝试添加这样的几行,但没有用。 ConfigurableEnvironment env = new StandardEnvironment(); propertyHolder.setEnvironment(env); 有谁知道为什么我的属性没有加载到Environment中? 谢谢。

JPA和Hibernate中@MapKey,@ MapKeyColumn和@MapKeyJoinColumn的区别

根据Hibernate文档 ,如果我们想将Map用作实体之间的关联,则可以使用多个注释。 医生说: 或者,映射键映射到专用列。 要自定义映射,请使用以下注释之一: @MapKeyColumn如果map键是基本类型。 如果未指定列名,则使用属性的名称,后跟下划线,后跟KEY(例如orders_KEY)。 @MapKeyEnumerated / @MapKeyTemporal如果映射键类型分别是枚举或日期。 @ MapKeyJoinColumn / @ MapKeyJoinColumns如果映射键类型是另一个实体。 当地图键是可嵌入对象时,@ AttributeOverride / @ AttributeOverrides。 使用密钥。 作为可嵌入对象属性名称的前缀。 如果不使用generics,也可以使用@MapKeyClass来定义键的类型。 通过一些示例,我能够理解@MapKey仅用于将键映射到目标实体的属性,并且该键仅用于获取记录。 @MapKeyColumn用于将键映射到目标实体的属性,该键用于保存和获取记录。 如果这是正确的,请告诉我? 当我需要使用@ MapKeyJoinColumn / @ MapKeyJoinColumns和@MapKeyEnumerated / @MapKeyTemporal时,请告诉我 谢谢!

java中的引用和对象有什么区别?

我有类GUI,所以我可以创建这样的对象: GUI g1 = new GUI(); 和这样的引用变量: GUI g2; 现在据我所知,g2是一个引用变量,它引用了GUI类,g1是GUI类的一个对象。 g1和g2有什么区别? 我可以使用GUI类的属性与对象,但g2的可能用途是什么?

在Web应用程序中注册shutDownHook

我们如何在Web应用程序中注册关闭挂钩? 有没有什么可以在web.xml或applicationContext.xml中注册它? 我知道如果我们使用主类的应用程序,那很简单。 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“ApplicationContext.xml”); context.registerShutdownHook(); 但是Web应用程序怎么样? 因为它使用ContextListener

如果JVM在执行GC时继续移动对象,它如何解析引用?

我正在阅读JVM调优,我发现JVM在执行GC时会不断移动对象。 但Java对象之间有相互引用,人们认为它们是作为指针实现的,但每次移动对象后JVM都不可能遍历整个堆,并更新所有引用; 肯定会永远。 那么它如何解析引用,如果引用没有改变,但对象的物理位置呢? 我已经阅读了很多关于JVM的内容,但在任何地方都没有解释,甚至暗示过。 [编辑]我的观点是,引用是单向的。 从指针指向指向是“瞬时”,但反过来需要完整的堆扫描。 虽然有可能,但似乎不太可能。 如果10K对象在次要集合中存活,那么执行完整堆扫描需要多长时间才能更新对这些对象的引用10K次? 必须使用某种优化的算法或结构。

调用select()时,Java节点在使用选择器注册通道时阻塞。 该怎么办?

我有一个基本问题。 SelectableChannel的寄存器方法为何以及如何阻止调用。 让我提供一个场景。 我在类Register中创建了一个Selector对象,如下所示。 private static Selector selector = Selector.open(); 我在同一类(寄存器)中也有一个方法用选择器注册通道。 public static SelectionKey registerChannel(SelectableChannel channel, int ops) throws IOException { channel.configureBlocking(false); return channel.register(selector, ops); } 还有另一个名为Request的类,它具有从通道,进程和调用方法中读取数据以注册通道的方法。 selectonKey = Register.register(socketChannel, SelectionKey.OP_READ); 在这一点上,线程被阻塞,没有提供它正在等待的线索。 我已经确认选择器已打开。 请帮助我了解如何解决此问题。 我可以释放任何锁吗? 任何输入将不胜感激。 添加到我所描述的内容中。 进一步的测试显示,如果从同一个线程调用Register.register方法,它可以注册但在此之后如果其他一些线程试图调用该方法,则线程不会继续前进。

JavaMail:保持IMAPFolder.idle()活着

我正在制作一个程序,需要监控Gmail帐户中的新邮件,为了尽快得到它们,我使用的是JavaMail的空闲function。 这是我用来调用folder.idle()的线程的代码片段: //Run method that waits for idle input. If an exception occurs, end the thread’s life. public void run() { IMAPFolder folder = null; try { folder = getFolder(); while(true) { //If connection has been lost, attempt to restore it if (!folder.isOpen()) folder = getFolder(); //Wait until something happens in inbox folder.idle(true); //Notify controller […]

强制释放本机内存的示例直接ByteBuffer使用sun.misc.Unsafe分配?

JDK提供了分配所谓的直接ByteBuffers的能力,其中内存在Java堆之外分配。 这可能是有益的,因为垃圾收集器不会触及这个内存,因此不会导致GC开销:这对于像缓存这样的长期存在的东西来说非常有用。 但是,现有实现存在一个关键问题:当拥有ByteBuffer被垃圾收集时,底层内存只是异步分配; 没有办法强迫早期解除分配。 这可能会有问题,因为GC循环本身不受ByteBuffers处理的影响,并且假设ByteBuffers可能驻留在Old Generation内存区域,则可能在ByteBuffer不再使用后几小时调用GC。 但理论上应该可以直接使用sun.misc.Unsafe方法(freeMemory,allocateMemory):这是JDK本身用于分配/解除分配本机内存的方法。 看看代码,我看到的一个潜在问题是内存双重释放的可能性 – 所以我想确保正确清理状态。 任何人都可以指向我这样做的代码吗? 理想情况下,想要使用它而不是JNA。 注意:我看到这个问题有点相关。 看起来指出的答案是很好的方法: 这里是使用这个想法的Elastic Search的代码示例。 谢谢大家!