如何强制Spring Security更新XSRF-TOKEN cookie?

Spring Boot应用程序中的REST Spring Security /user服务无法在用户进行身份validation时立即更新XSRF-TOKEN cookie。 这导致/any-other-REST-service-url的下一个请求返回Invalid CSRF certificate错误,直到再次调用/user服务。 如何解决此问题,以便REST /user服务在首先validation用户的同一请求/响应事务中正确更新XSRF-TOKEN cookie? 后端REST /user服务由前端应用程序调用三次,但/user服务仅在第一次和第三次调用时返回匹配的JSESSIONID/XSRF-TOKEN cookie,而不是在第二次调用时返回。 在对服务器的第一个请求中,没有凭证(没有用户名或密码)发送到/ url模式,我认为调用/user服务,服务器响应JSESSIONID和XSRF-TOKEN它与匿名关联用户。 FireFox开发人员工具的“网络”选项卡将这些cookie显示为: Response cookies: JSESSIONID:”D89FF3AD2ACA7007D927872C11007BCF” path:”/” httpOnly:true XSRF-TOKEN:”67acdc7f-5127-4ea2-9a7b-831e95957789″ path:”/” 然后,用户可以无错误地对公共可访问资源发出各种请求,FireFox开发人员工具的“网络”选项卡显示这些相同的cookie值。 对/user服务的第二个请求是通过登录表单完成的,该表单发送有效的用户名和密码, /user服务使用该用户名和密码来validation用户。 但/user服务仅返回更新的jsessionid cookie,并且不会在此步骤中更新xsrf-token cookie。 以下是此时FireFox开发人员工具的“网络”选项卡中显示的Cookie: 200 GET user在FireFox的“网络”选项卡中包含以下Cookie: Response cookies: JSESSIONID:”5D3B51A03B9AE218586591E67C53FB89″ path:”/” httpOnly:true AUTH1:”yes” Request cookies: JSESSIONID:”D89FF3AD2ACA7007D927872C11007BCF” XSRF-TOKEN:”67acdc7f-5127-4ea2-9a7b-831e95957789″ 请注意,响应包含新的JSESSIONID ,但未包含新的XSRF-TOKEN 。 这导致不匹配导致对其他rest服务的后续请求中的403错误(由于无效的csrf令牌),直到通过对/user服务的第三次调用解决此问题。 有没有办法我们可以强制前面的200 get user也返回新的XSRF-TOKEN ? 对后端REST /user服务的第三次调用使用与上面显示的第二个请求中使用的用户名和密码相同的凭据,但第三次调用/user导致XSRF_TOKEN […]

@ControllerAdviceexception处理程序方法未被调用

我正在为Spring MVC中的exception处理示例演示应用程序。我正在尝试Exception Handling With @ControllerAdvice 我按照此链接中描述的步骤进行操作。 但是当我运行我的应用程序时,我得到以下错误 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.test.core.ApplicationException 有关详细信息,请参阅我正在处理的课程 ApplicationException.java public class ApplicationException extends RuntimeException{ /** * */ private static final long serialVersionUID = -9061684361606685158L; private ErrorStatus errorStatus; private int msgNumber; private Object []args; public ApplicationException(){} public ApplicationException(ErrorStatus errorStatus, int msgNumber, Object[] args) { this.errorStatus = errorStatus; this.msgNumber […]

Google Datastore Querys会返回陈旧数据

我正在使用Google App Engine,当我从数据存储中删除并再次列出结果时,我会恢复过时的数据。 问题是什么? 这是我使用的代码。 public void remove(long id) { EntityManager em = EMFService.get().createEntityManager(); try { Todo todo = em.find(Todo.class, id); em.remove(todo); } finally { em.close(); } } public List getTodos(String userId) { EntityManager em = EMFService.get().createEntityManager(); Query q = em .createQuery(“select t from Todo t where t.author = :userId”); q.setParameter(“userId”, userId); List todos = […]

如何查找哪些对象创建的垃圾最多

我有一个应用程序,包含80个不同类的大约80个实例。 由于我的应用程序是实时的,因此这些类的某些子集生成的垃圾量是不可接受的并且停止世界暂停太长时间。 我想要找到的是哪些类负责在堆上创建最大数量的对象(不是聚合大小,而是原始对象数),因为这是导致世界暂停停留这么长时间的原因。 我怎么发现这个? 如果需要JVisualVM,我就有这个。

是否有任何工具可以检测不再使用的代码/function?

我们有许多应用程序正在运行(考虑所有这些应用程序都在Java平台上运行),我们需要检查最后一个,比如说3个月使用哪些应用程序,以及在这些活动应用程序中,哪些部分/function(以及频率)是还在使用。 那可能吗? 这里的目标是检测不再与业务相关的应用程序或function并删除它们,这样我们最终可以减少维护和监视的代码。 是否有任何工具可以帮助我们实现这一目标? 我们使用敏捷方法,因此当新应用程序投入生产时,它只具有对业务很重要的function,但有时这个应用程序的某些function会过期(出于不同的原因),所以我们希望有一种识别方法那。

通过AS1或AS2或AS3协议将EDI或XML文档从一台计算机传输到另一台计算机

我想编写一个简单的java程序,使用AS1或AS2或AS3协议将EDI或XML文档从一台机器传输到另一台机器。 任何人都可以帮我开始吗?

横向模式下URLImage的占位符缩放问题

我将占位符缩放到屏幕大小,如下所示。 但是如果它首先在纵向模式下观看,它只占用屏幕并且不会在横向模式下覆盖整个屏幕。 如果在横向模式下第一次观看,则它在纵向模式下显得大于屏幕尺寸。 我该如何解决这个问题。 我检查了PropertyCross演示,同样存在问题。 private EncodedImage largePlaceholder; protected void initVars(Resources res) { Image tmp = Image.createImage(Display.getInstance().getDisplayWidth(), Display.getInstance().getDisplayWidth() / 6 * 3, 0); largePlaceholder = EncodedImage.createFromImage(tmp, false); } findMainImg(f).setIcon(URLImage.createToStorage(largePlaceholder, getMainImg + “_0_ y”, getMainImg, URLImage.RESIZE_SCALE_TO_FILL)); 更新: int sizethumb = 0; int sizethumb1 = 0; if (responsesImg.size() > 0) { sizethumb = largePlaceholder.getWidth(); sizethumb1 = largePlaceholder.getHeight(); […]

无法在Glassfish上部署JAX-WS Web服务

我在使用Glassfish应用程序服务器运行JAX_WS Webservices时遇到问题。 以前,我曾经使用Apache tomcat,它可以很好地工作。 但现在,有了Glassfish,这个问题阻止了应用程序的部署…请在下面查看: 2013-04-04T13:09:23.028+0300 com.sun.xml.ws.wspolicy.com.sun.xml.ws.api.policy.ModelTranslator SEVERE: [failed to localize] WSP_0071_ERROR_MULTIPLE_ASSERTION_CREATORS_FOR_NAMESPACE(http://schemas.xmlsoap.org/ws/2004/08/addressing, com.sun.xml.ws.security.addressing.impl.policy.AddressingPolicyAssertionCreator, com.sun.xml.ws.addressing.impl.policy.AddressingPolicyAssertionCreator) 2013-04-04T13:09:23.028+0300 com.sun.xml.ws.wspolicy.jaxws.PolicyWSDLParserExtension SEVERE: [failed to localize] WSP_0071_ERROR_MULTIPLE_ASSERTION_CREATORS_FOR_NAMESPACE(http://schemas.xmlsoap.org/ws/2004/08/addressing, com.sun.xml.ws.security.addressing.impl.policy.AddressingPolicyAssertionCreator, com.sun.xml.ws.addressing.impl.policy.AddressingPolicyAssertionCreator) 2013-04-04T13:09:23.028+0300 com.sun.xml.ws.wspolicy.jaxws.PolicyWSDLParserExtension SEVERE: WSP1007: Policy exception occurred when finishing WSDL parsing. com.sun.xml.ws.policy.PolicyException: [failed to localize] WSP_0071_ERROR_MULTIPLE_ASSERTION_CREATORS_FOR_NAMESPACE(http://schemas.xmlsoap.org/ws/2004/08/addressing, com.sun.xml.ws.security.addressing.impl.policy.AddressingPolicyAssertionCreator, com.sun.xml.ws.addressing.impl.policy.AddressingPolicyAssertionCreator) at com.sun.xml.ws.policy.sourcemodel.PolicyModelTranslator.(PolicyModelTranslator.java:188) at com.sun.xml.ws.api.policy.ModelTranslator.(ModelTranslator.java:85) at com.sun.xml.ws.api.policy.ModelTranslator.(ModelTranslator.java:74) at com.sun.xml.ws.policy.jaxws.BuilderHandler.getPolicies(BuilderHandler.java:102) at com.sun.xml.ws.policy.jaxws.BuilderHandler.getPolicySubjects(BuilderHandler.java:110) at com.sun.xml.ws.policy.jaxws.BuilderHandlerEndpointScope.doPopulate(BuilderHandlerEndpointScope.java:72) at com.sun.xml.ws.policy.jaxws.BuilderHandler.populate(BuilderHandler.java:82) […]

如何在Parse查询中包含超时?

我的问题是关于Android的parse.com查询以及如果查询花费太长时间来响应,如何设置超时。 例如,我有一个查询,我从parse.com获取字符串列表。 如果此查询从parse.com收到的时间太长(例如,十秒),我希望用户能够取消查询(例如,使用屏幕弹出窗口)。 相反,应用程序在等待30秒后崩溃。 那么,有没有办法为查询设置自己的超时,然后适当地处理它们?

如何让多个Threads绘制到AWT组件上?

编辑:解决了,看下面我的解决方案。 首先,这是我的第一个问题,所以如果我犯了任何错误,请告诉我。 我正在尝试用Java编写Mandelbrot分形程序,用于培训目的。 我想要的所有function的理想选择是Fractalizer( http://www.fractalizer.de/en/ ),但就目前而言,我会对在屏幕上绘制Mandelbrot Set的程序感到满意(而不是例如,将其写入图像文件)。 当然,我希望程序快速,所以我认为我可以将计算分成多个线程来利用我的多核处理器; 例如,在四核系统上,图像将被分成2×2 = 4个图像,每个图像由单独的线程计算。 所有这些线程都会传递一个Graphics对象,并在计算像素时绘制像素。 我的第一次尝试是让线程在BufferedImage.getGraphics()上绘制,并且只要图像没有完成,paint()方法就会不断调用repaint(): g.drawImage(tempImg, 0, 0, null); if (waiterThread.isAlive()) { try { Thread.sleep(10); } catch (InterruptedException e) { // do nothing } repaint(10); } (waiterThread一个接一个地连接所有计算线程,所以只要waiterThread存活,至少有一个计算线程尚未完成。) 这有效,但由于经常重新绘制,会在canvas上造成难看的闪烁。 然后,通过一个小的测试程序,我发现Graphics.draw *任何*在paint方法返回之前立即在屏幕上绘制,所以我当前的方法如下: 一个GridLayout包含2×2的面板(在<4核系统上,1×1)MandelbrotCanvas对象 每个MandelbrotCanvas对象将在第一次paint()调用时初始化一个计算Thread,将其自己的Graphics对象传递给它(实际上,我使用的是一个自定义的GroupGraphics类,它将一个Graphics调用传递给多个图形,以“备份”将图像转换为BufferedImage.getGraphics(),但这并不重要),并启动计算线程。 面板将在其paint()方法中从每个MandelbrotCanvases中获取计算线程并加入()它们。 不幸的是,这只会产生黑屏。 仅在计算完成时,才会显示图像。 将多个线程绘制到一个组件上的正确方法是什么? 编辑: 我不知道的事情:只允许事件调度线程在AWT组件上绘制(粗略说出),这意味着上面的最后一种方法不可行 – 显然,它应该抛出exception,但我没有’得到一个。 我的解决方案是使用第一种方法 – 将图像绘制到BufferedImage上并将其绘制到Canvas上 – 唯一的修改是我重载update()方法以调用paint()方法而不清除绘制区域 : public […]