小编use*_*710的帖子

Spring Boot:在动态父对象中包装JSON响应

我有一个REST API规范,与后端微服务进行通信,返回以下值:

关于"集合"响应(例如GET /用户):

{
    users: [
        {
            ... // single user object data
        }
    ],
    links: [
        {
            ... // single HATEOAS link object
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

关于"单个对象"的回应(例如GET /users/{userUuid}):

{
    user: {
        ... // {userUuid} user object}
    }
}
Run Code Online (Sandbox Code Playgroud)

选择这种方法是为了使单个响应是可扩展的(例如,如果在线下GET /users/{userUuid}获得额外的查询参数,那么?detailedView=true我们将有额外的请求信息).

从根本上说,我认为这是一种可以最大限度地减少API更新之间的重大变化的方法.但是,将此模型转换为代码证明是非常艰巨的.

假设对于单个响应,我为单个用户提供了以下API模型对象:

public class SingleUserResource {
    private MicroserviceUserModel user;

    public SingleUserResource(MicroserviceUserModel user) {
        this.user = user;
    }

    public String getName() {
        return user.getName();
    }

    // other getters for fields we wish to …
Run Code Online (Sandbox Code Playgroud)

java spring json jackson spring-boot

15
推荐指数
2
解决办法
9189
查看次数

JDBC驱动程序的版本和DB的版本是否必须完全匹配?

假设我在服务器上运行了postgresql 9.1,但我选择使用9.2驱动程序来访问它.这会有用吗?如果没有,这些版本检查是否总是强制执行,还是取决于您的DBMS?

postgresql jdbc version

14
推荐指数
1
解决办法
4675
查看次数

Spring Boot:简单地忽略配置类并且不加载

我在几个@Configuration类的路径上有以下课程@SpringBootApplication:

@Configuration
@Import({MainConfig.class, RestConfig.class})
public class ApiConfig {

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    public Client client() throws ExecutionException, InterruptedException {
        return service.create(Client.class);
    }

}
Run Code Online (Sandbox Code Playgroud)

我有两个使用此配置的服务(具有不同命名的Client类).

服务1正确启动并加载此配置.我可以在启动时看到一个类型的bean ApiConfig被急切地初始化.

服务2启动不正确:上述配置类被简单地忽略并且未初始化.

这些服务在单独的JVM中启动.

Ther服务有几乎相同的非常小的application.properties文件:

spring.application.name=xxx-api
server.port=0
eureka.name=xxx.api
# Only for reading properties from a central location
context.initializer.classes=com.package.contextClass
Run Code Online (Sandbox Code Playgroud)

我甚至不确定我可以在这个问题中写出什么样的附加信息.我现在已经经历了几个小时的日志,看到没有明显的区别,只是它显然忽略了我的@Configuration班级.

以前有人有这个问题吗?

java spring spring-boot

13
推荐指数
1
解决办法
2万
查看次数

如何在 Spring Boot 中测试 json 结构

我发现这个代码来测试 json 字符串是否等于另一个字符串

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MockMvcExampleTests {

    @Autowired
    private MockMvc mvc;

    @Test
    public void exampleTest() throws Exception {
        this.mvc.perform(get("/")).andExpect(status().isOk())
                .andExpect(content().string("Hello World"));
    }

}
Run Code Online (Sandbox Code Playgroud)

你知道如何测试json结构吗?就像检查对象是否包含 id、name、age...无论值是什么。谢谢。

testing json mocking mockito spring-boot

12
推荐指数
1
解决办法
2万
查看次数

PHP和Symfony的Websockets - 网络和服务器架构

我们有一个Web应用程序,当前使用轮询来处理持续更新.

虽然切换到长轮询可能是一个小问题,但我们希望实现一个持久且可扩展的Websockets解决方案.

我的问题是:这需要什么样的架构

我自己做了一些研究,发现企业应用程序的典型设置是这样的: websocket流量

然后连接的执行流程将是这样的:

  1. 初始握手
    • 客户端发出的HTTP请求Server以及JS请求WebSocket连接
    • Server响应,Header包含该Upgrade客户端的指令和交换机协议
    • Websocket Server Websocket与客户端建立连接
  2. 客户提交POST/ PUT/等.
    • Webserver (Apache/Nginx)从查询中获取结果
    • Webserver将结果发送到MQ添加到队列的位置
    • MessageWebsocket从... 发送到服务器MQ
    • Message 被送回客户端

这种方法是否正确?我错过了什么吗?我不明白了吗?

php architecture websocket symfony

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

OffsetDateTime在GET方法中产生"没有为public javax.ws.rs.core.response类型的参数找到注入源"

我有以下GETREST方法:

import java.time.OffsetDateTime;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import com.product.rest.api.TransactionsApi;
import com.product.rest.model.Transaction;

@Path("/transactions")

@Api(description = "the transactions API")
@Consumes({ "application/json" })
@Produces({ "application/json" })
public class TransactionsApiImpl extends TransactionsApi {

    @GET

    @Consumes({ "application/json" })
    @Produces({ "application/json" })
    @ApiOperation(value = "", notes = "Get all transactions", response =     Transaction.class, responseContainer = "List", tags = …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs swagger

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

使用鼠标滚轮在桌面上的Sencha Touch应用程序中滚动

在寻找如何在Sencha Touch中使用鼠标滚轮滚动时,我遇到了这个答案.但是,我对Sencha Touch相对较新,并且我保留了使用它的代码库.

答案是把它放在我的应用程序初始化块中:据我所知,这将是我的app.js文件由Sencha Cmd(具有一个launch函数)生成.但是,在此之后我迷路了.我想补充上述答案的第一部分launch块?在它之外?我如何确保在每个页面上自动调用它?

编辑:这是我的app.js文件,万一它有帮助.

Ext.application({
    name: 'App',

    requires: [
        'Ext.MessageBox',
        'Ext.direct.*'
    ],

    models:[
        "..."
    ],

    controllers: [
        '...',
        '...',
        '...'
    ],

    icon: {
        '57': 'resources/icons/Icon.png',
        '72': 'resources/icons/Icon~ipad.png',
        '114': 'resources/icons/Icon@2x.png',
        '144': 'resources/icons/Icon~ipad@2x.png'
    },

    isIconPrecomposed: true,

    startupImage: {
        '320x460': 'resources/startup/320x460.jpg',
        '640x920': 'resources/startup/640x920.png',
        '768x1004': 'resources/startup/768x1004.png',
        '748x1024': 'resources/startup/748x1024.png',
        '1536x2008': 'resources/startup/1536x2008.png',
        '1496x2048': 'resources/startup/1496x2048.png'
    },

    profiles: ['Tablet', 'Phone'],

    launch: function() {

        ...
    }

    ....

});
Run Code Online (Sandbox Code Playgroud)

编辑2:我正在使用Sencha …

javascript extjs sencha-touch sencha-touch-2

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

适用于Windows的pgadmin3黑暗主题?

Windows下的pgadmin3是否有黑暗主题?我一直在搜索选项和谷歌谷歌试图找到任何指向它的东西,无济于事.

我运气不好吗?

postgresql themes pgadmin

6
推荐指数
2
解决办法
4601
查看次数

使用AspectJ LTW允许Spring-proxy功能自我调用非公共方法和相关注意事项

我已经看到了相关的春天功能的例子不胜枚举@Cacheable,@Transactional,@Async其中相同的选项重申每次等:

  1. 通过代理对象进行的自我调用通过或者ApplicationContext.getBean(MyService.class)自动装配的MyService.class代理对象获得@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS),

  2. 将目标方法重定位到单独的@Service类,

  3. 使用AspectJ加载时编织.

虽然前两种方法通常都很好,但有时我们需要将上述三种(和其他)注释的功能附加到私有方法,无论是出于代码清晰度,设计还是其他原因.


前两种方法有很多例子,但最后一种方法很少.据我所知,由于AspectJ LTW的性质,默认情况下它与通常的Spring AOP行为相互排斥,可以@Cacheable轻松实现等行为.我的问题如下:

  1. 在使用AspectJ LTW时,通常使用前两个选项来启用上述行为是否有任何不错的示例?

  2. 有没有一种方法,使的AspectJ LTW选择性,如不@Async@Transactional,但只@Cacheable?一个示例用例可能是:由于团队的设计,所有可缓存的方法(其中一些可能是私有的)应该位于外观类中,该类调用执行繁重计算的私有方法,但可能更新某些状态(即'last-queried-at: #')在返回外部之前调用.

这个问题来自spring-boot用户的观点,但我认为它通常适用于Spring AOP和AspectJ LTW.如果在这种情况下需要特殊考虑,请纠正我.

spring aspectj spring-aop spring-boot spring-aspects

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

事件采购和密码更改安全隐患

当密码更新问题出现时,我最近开始致力于事件采购.

我的理解如下:

  1. 事件存储在事件存储中,事件存储充当当前应用程序和对象状态的单一事实源.我们可能会在创建所述对象后重放给定对象的一系列事件,并找到该对象的当前状态.

  2. 事件必须无限期地存储,因为链中断会导致可能不一致的状态.如果每次为某些视图处理的事件太多,我们可能会创建事件链的快照(即对象的当前状态).

对我来说,这对于类似的东西有明显的安全隐患user updated password.在这种情况下,我们会看到类似的东西:

- UserCreatedEvent(user)
- ... // other events that might change the state of the User object
- UserChangedPasswordEvent(updatedPassword)
Run Code Online (Sandbox Code Playgroud)

我用这种方法看到的问题是,为了使应用程序保持一致状态,我们必须存储用户的所有先前密码,因为我们无法判断给定密码是当前密码还是用户以前的密码之一(给定只有UserChangedPasswordEvent).

为了论证,假设应用程序使用除了以外的较弱算法存储密码BCrypt,并且密码在给定的时间帧(即暴力/彩虹表)之后是可破解的.

在事件源的情况下,设法获得UserChangedPasswordEvent商店的攻击者现在将拥有用户在应用程序中使用过的所有密码的列表.在这种情况下,他们也不可能访问UserCreatedEvent商店,因此也可以访问用户的(通常)唯一电子邮件.

由于大多数临时用户不幸地在各种平台上重复使用密码,因此攻击者现在可能会访问用户可能在多个平台上使用过的任意数量的密码.如果存在诸如"X时间后强制密码更新"之类的机制,则会更糟.

尽管如此,这是最常见的事件源和密码更新方法,还是有一种标准化的方法来处理这部分应用程序?我承认场景的前提(弱密码哈希)是一个弱点,但它最好得到我的观点.

我可以想到两种方法来解决这个问题:

  • 加密事件存储和/或文件系统; 影响绩效
  • UserChangedPasswordEvent仅通知更改本身,密码通过其他渠道存储在其他地方; 然而,违背了事件采购的想法

我在这里推翻这个问题吗?是否有一个问题在这里,如果使用适当的散列算法?

events password-protection event-sourcing

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