使用Java的OpenId提供程序/服务器

我正在尝试使用OpenId服务增强现有Java Web应用程序,以便登录用户可以使用我的Web应用程序作为OpenId提供程序登录到另一个支持OpenId的应用程序。 我的第一次尝试是使用JOS作为OpenId提供者,而后者应该使用我的应用程序的数据库来获取现有的用户名和密码。 然而,当我试图自定义JOS以使其适合我现有的应用程序时,我找不到任何关于JOS的文档( 它甚至没有编译更新:它只用Java 6编译)。 目前我正在寻找其他可能的解决方案,但OpenId提供商框架似乎很少。 你会推荐什么? 使用像JOS这样的完成的服务器,或者我应该考虑通过使用openid4java这样的库编写自己的OpenId服务器来增强我的应用程序?

使用Powermock测试Spring控制器

我有一个测试特定控制器的类,它工作正常 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = “classpath:config/test-applicationContext-config.xml”) @TestExecutionListeners({ WebContextTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class }) public class TestAdminController { //….. } 我使用了mockito.org上的Google的Mockito库来模拟我的底层bean。 现在我的问题是:我有一些类需要被嘲笑,但他们有final方法,谷歌的mockito似乎没有解决这个问题。 我的一位同事建议使用powermock.org上的Powermock 。 但它需要使用@RunWith(PowerMockRunner.class)注释来注释测试器类。 如果我使用这个,我必须删除注释@RunWith(SpringJUnit4ClassRunner.class) ,这将给我带来问题,因为不会创建Spring测试上下文。 我怎么能避免这种情况? 建议我配置使用PowerMockRule而不是@RunWith注释 我的项目Maven依赖项如下 org.powermock powermock-mockito-release-full 1.5 pom org.powermock powermock-module-junit4-rule 1.5 test org.powermock powermock-classloading-xstream 1.5 test 现在我的class级看起来像这样(另一个控制器测试) @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = “classpath:config/test-applicationContext-config.xml”) @TestExecutionListeners({ WebContextTestExecutionListener.class, DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class }) @PrepareForTest(ADSynchronizationImpl.class) public class ThirdPartyLoginControllerTest { @Rule public […]

为什么在DTO中覆盖toString方法

我看到DTO对象中的大多数时候,toString方法被动作覆盖。 例如 : public class Person implements Serializable { private String firstName; private String lastName; private int age; /** * Creates a new instance of Person */ public Person() { } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public […]

在Java中使用多级HashMap的最佳实践

我们有一种情况,我们最终使用多级哈希映射; 也就是说,哈希映射内部的哈希映射,深度为三层或四层。 本能地,这在某个地方感觉不对。 我在这里阅读了有关如何迭代/使用多级哈希映射的post,但几乎没有人说这是什么最好的做法。 为什么多级哈希映射不好,如果有的话,更好的设计是什么? 以下是我们拥有的多级哈希映射的示例设计: Map map1; class Object1 { String version; Map map2; } class Object2 { Map<String,List> map4; Map map5; }

将连接池与Jedis一起使用

我在rest服务中使用Jedis连接redis服务器。 当我调用Web服务时,我想做jedis.hmget , jedis.exits和hgetALL之类的操作 。 jedis.hmget(“employee:data:” + emp_user_id, “employee_id”).get(0); 我用于redis的配置是: Jedis jedis; JedisShardInfo shardInfo; @PostConstruct public void init() { try { shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort()); shardInfo.setPassword(Config.getRedisPassword()); jedis = new Jedis(shardInfo); jedis.select(2); //jedis.se } catch (Exception e) { logger.error(“Exception in init ——- > ” + e); } } 我知道jedis不是线程安全的。当我一次使用1000个线程来调用服务时,我得到exception作为意外的流结束。 我开始知道jedis pool是线程安全但无法找到它的具体解决方案。 谢谢。 任何帮助,将不胜感激。

日期格式dd \ mm \ yyyy的正则表达式是什么?

日期格式dd \ mm \ yyyy的正则表达式是什么? 我无法找到这种格式的正则表达式?

如何在服务器validation失败后重新填充jsp页面上的表单字段

我有一个非常简单的Java MVC Web应用程序,并使用servlet来处理表单validation。 如果表单已经过validation,请求将转发到适当的视图。 但是,如果表单validation失败,请求将转发回表单,然后显示相应的错误消息。 我的问题是 – 使用最初由用户在表单中输入的数据重新填充所有表单字段的最有效方法是什么? 我没有使用MVC框架,只使用简单的HttpServlets作为控制器,以.jsp作为视图。

Java中内存分配的典型速度是多少?

我正在分析Java应用程序,并发现对象分配发生的速度比我预期的要慢得多。 我运行了一个简单的基准测试来尝试建立小对象分配的整体速度,我发现在我的机器上分配一个小对象(3个浮点数的向量)似乎需要大约200纳秒。 我正在运行(双核)2.0 GHz处理器,因此大约有400个CPU周期。 我想问一下这里的人们是否有关于Java应用程序的概述,然后才能预期这种速度。 这对我来说似乎有点残忍和不寻常。 毕竟,我认为像Java这样可以压缩堆并重定位对象的语言会让对象分配如下所示: int obj_addr = heap_ptr; heap_ptr += some_constant_size_of_object return obj_addr; ….这是几行assembly。 至于垃圾收集,我不会分配或丢弃足够的对象来进行游戏。 当我通过重用对象来优化我的代码时,我得到的性能大约为15纳秒/对象我需要处理而不是每个对象需要处理200 ns,因此重用对象可以极大地提高性能。 我真的很想不重用对象,因为这会使符号变得多毛(许多方法需要接受receptacle参数而不是返回值)。 所以问题是:对象分配花费这么长时间是否正常? 或者我的机器上可能出现问题,一旦修复,可能会让我在这方面有更好的表现? 小对象分配通常需要多长时间用于其他人,并且是否有典型值? 我正在使用客户端计算机,目前不使用任何编译标志。 如果您的机器上的速度更快,那么您机器的JVM版本和操作系统是什么? 我意识到个人里程在性能方面可能会有很大差异,但我只想问我上面提到的数字是否正好在他们正确的范围内。

IntelliJ IDEA @SuppressWarnings用于检查工具名称

我知道我可以抑制IntelliJ IDEA检查的警告: @SuppressWarnings(“CollectionDeclaredAsConcreteClass”) public PropertiesExpander(Properties properties) { this.properties.putAll(properties); } 对于来自外部的人,可能不清楚需要哪种工具进行抑制。 PMD使用前缀: @SuppressWarnings(“PMD.UnusedLocalVariable”) FindBugs使用专用注释: @SuppressFBWarnings(“NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR”) 有没有办法清楚地表明这种抑制只适用于IntelliJ IDEA?

线程睡眠时间过长

我写了一个简单的程序,注意到我的线程太快,我无法运行JVisualVM,标记我要监视哪个应用程序,插入并查看线程。 然后我让他们睡了 现在注意到的工具报告它们只是睡觉(或者几乎只是睡觉)。 即使他们工作。 这引出了一个问题:为什么?! new Thread(() -> { while(true) { System.out.println(“not sleeping”); try { Thread.sleep(0,1); } catch (InterruptedException e) { e.printStackTrace(); } } }, “not sleeping!”).start(); 这个线程应该睡眠1纳秒,但是看看JVisualVM是如何报告的: 运行57秒后,它报告5s运行时间,rest时正在睡觉 – 一个错误或我的理解是错误的? 它不仅仅是JVisualVM: $ while true; do jstack 8277 | grep -A 2 not; done [% 20:34:27] “not sleeping!” #10 prio=5 os_prio=0 tid=0x00007f5ea82d1000 nid=0x2078 waiting on […]