小编Jam*_*mes的帖子

Thymeleaf:如果属性和属性存在,则显示文本

如果属性和属性存在,是否有一种简单的方法在百万富翁中显示属性属性的内容?如果我的html页面中存在属性"summary"的属性"error",我想展示它:

<span th:text="${error.summary}">error summary</span>
Run Code Online (Sandbox Code Playgroud)

如果没有属性"error",则会引发以下错误:

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Field or property 'summary' cannot be found on null

目前我正在使用以下方法,这似乎太复杂了.

<span th:if="${error != null and error.summary != null}"><span th:text="${error.summary}">error summary</span></span>
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来实现这一目标?

spring spring-el thymeleaf

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

使用spring security oauth2进行双因素身份验证

我正在寻找有关如何使用spring security OAuth2实现双因素身份验证(2FA)的想法.要求是用户仅需要对具有敏感信息的特定应用程序进行双因素身份验证.这些webapps有自己的客户端ID.

我想到的一个想法是"误用"范围审批页面以强制用户输入2FA代码/ PIN(或其他).

示例流程如下所示:

不使用和使用2FA访问应用程序

  • 用户已注销
  • 用户访问不需要2FA的应用A.
  • 重定向到OAuth应用,用户使用用户名和密码登录
  • 重定向回应用程序A并且用户已登录
  • 用户访问app B,也不需要2FA
  • 重定向到OAuth应用,重定向回应用B,用户直接登录
  • 用户访问应用程序S的确实需要2FA
  • 重定向到OAuth应用,用户需要另外提供2FA令牌
  • 重定向回应用程序S并且用户已登录

使用2FA直接访问应用

  • 用户已注销
  • 用户访问应用程序S的确实需要2FA
  • 重定向到OAuth应用,用户使用用户名和密码登录,用户需要另外提供2FA令牌
  • 重定向回应用程序S并且用户已登录

你有其他想法如何计算这个吗?

spring two-factor-authentication spring-security-oauth2

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

如何处理spring-security-oauth2的版本升级?

spring-security-oauth2将Authentication对象作为序列化java对象(ByteArrayOutputStream.writeObject(authentication))保存在数据库中作为访问令牌条目的一部分.

你如何处理spring-security(可能会改变SpringSecurityCoreVersion.SERIAL_VERSION_UID)和spring-security-oauth(可能改变了serialVersionUID OAuth2Authentication)的版本升级?如果serialVersionUID发生更改,则无法再对反序列化持久化的Authentication对象.

我们得出的结论是,在升级框架版本时,删除包含序列化身份验证对象的访问令牌将是最干净,最简单的解决方案.任何想法如何更优雅地处理这个?

java serialization spring spring-security spring-security-oauth2

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

使用OAuth 2进行单点注销

我们刚刚讨论了使用OAuth 2时的登录和注销行为.假设我们有两个webapp AB使用一个OAuth提供程序O(使用spring-security-oauth2堆栈构建).

当您想要登录时,A您将被重定向到O,输入您的凭据,在那里获得会话O,重定向回A使用访问令牌,并且还创建会话A.

现在,当您想要登录时,B您被重定向到O,直接用令牌发送回B,因为您仍然有一个有效的sesison O并且也创建了会话B(无需再次输入您的凭据).

这解决了我们的单点登录问题.

现在的一个要求是,当您退出时,A 或者 B您从两个/所有应用程序中注销(单点注销).

我们的想法是:

  • 使用当前会话ID增强访问令牌
  • 如果应用AB想要注销用户,他们会将其重定向到注销页面O
  • 如果用户退出O,O则删除属于当前会话的所有访问令牌,并将用户重定向回AB
  • 会议开始A或被B破坏
  • AB检查每个请求上OAuth访问令牌的有效性,如果令牌无效,则销毁其会话

您认为这是OAuth 2的有效用例吗?您如何以不同方式实施单点注销?

oauth logout oauth-2.0 spring-security-oauth2

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

为什么在普罗米修斯中,increase()会返回1.33的值?

我们用时间序列图表sum(increase(foo_requests_total[1m]))来显示每分钟的foo请求数.请求很偶然 - 每天只有几个请求.图表中显示的值始终为1.3333.为什么价值不是1?在这一分钟内有一个请求.

在此输入图像描述

prometheus

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

如何在Package Explorer中隐藏"Maven Dependencies"

有没有办法Maven Dependencies在Package Explorer中隐藏classpath容器?每次我跳进一个依赖类,Maven依赖树就会扩展到类(如果选择了"Link with Editor",这是我的首选设置).导航到自己的类或资源然后需要在Package Explorer中进行大量滚动,这非常烦人.

有没有办法隐藏"Maven Dependencies"类路径容器或避免它自动展开而不必停用"Link with Editor"?

在此输入图像描述

eclipse maven m2e

8
推荐指数
1
解决办法
2053
查看次数

如何在Windows上永久更改mercurial命令行的语言?

如何在Windows上将mercurial命令行的语言永久更改为英语?按照本答案中的描述设置LANG环境变量可以暂时帮助一个命令窗口,但语言是否可以在mercurial.ini(或hgrc)中以某种方式设置或以其他方式设置?

这背后的原因:德国的mercurial输出被打破,所有特殊字符(Umlaute等)都没有正确显示.

windows mercurial command-line

7
推荐指数
2
解决办法
2714
查看次数

使用spring java config以编程方式定义bean别名

我们的应用程序中有几个DB连接,因此JPA有几个配置.配置只有架构名称,数据库主机名等不同.其余如休眠设置等(通常)相同.这导致多个HibernateJpaVendorAdapter,数据源等bean.它们都需要不同的名称,以免它们发生碰撞.我们目前手动设置如下:

@Configuration
@Bean
public class FooDbConfig {
     public DataSource fooDataSource() {
         return ...;
     }
     // ... more beans like HibernateJpaVendorAdapter etc.
} 

@Configuration
@Bean
public class BarDbConfig {
     public DataSource barDataSource() {
         return ...;
     }
     // ... more beans like HibernateJpaVendorAdapter etc.
} 
Run Code Online (Sandbox Code Playgroud)

这当然是非常脆弱的维护.

我们想要一些java配置"Configurer",通过传递bean名称前缀来创建必要bean的设置.然后它应该创建具有不同名称的所有必需的bean(数据源等),前缀为给定的前缀(例如"fooDataSource"和"barDataSource").

这样做的好方法是什么?

我怎么能用java配置以编程方式生成bean别名?

java spring spring-bean spring-java-config

7
推荐指数
0
解决办法
675
查看次数

用prometheus和grafana绘制慢速计数器

我们用sum(rate(my_counter_total[1m]))或用图形表示快速计数器sum(irate(my_counter_total[20s])).如果你总是可以期望在最后几秒内改变,那么第二个是可取的.

但是你如何绘制慢速计数器,你每隔几分钟甚至几小时只有一些增量?具有0.0013232/s的值不是非常人性化的.

假设我想说明有多少用户注册我们的服务(我们希望每小时注册几次).什么是合理的查询?

我们目前使用以下内容来绘制grafana:

  • 查询: 3600 * sum(rate(signup_total[1h]))
  • 步骤:3600s
  • 分辨率:1/1

慢速计数器设置

这合理吗?

我仍然试图了解所有这些参数如何一起绘制图形.有人可以解释如何范围选择([10m])时,rate()irate()功能外,StepResolution设置在grafana互相影响?

graphing grafana prometheus

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

使用HAL设计RESTful API - 序列化模型关系

我对REST比较陌生,但我一直在做关于RESTful应该是什么的功课.现在我正在尝试为我的模型创建一个RESTful api,它实现了一个与其他模型有关系的JSON + HAL序列化器.
python中的示例模型:

class Category(Model):
    name = CharField()
    parent = ManyToOneField(Category)
    categories = OneToManyField(Category)
    products = ManyToManyField(Product)

class Product(Model):
    name = CharField()
    price = DecimalField()
    related = ManyToManyField(Product)
    categories = ManyToManyField(Category)
Run Code Online (Sandbox Code Playgroud)

假设我们有一个类别"目录",其子类别"食物"与产品"汉堡"和"热狗"都是相关的.
第一个问题.类别和产品应该是资源,所以他们需要一个URI,我应该在我的模型实现一个URI区域,并将其存储在数据库中或以某种方式在运行时计算的话,大约多标识符(URI)是什么?
第二个问题.可发现性,在Hal格式中应该"GET /"和不同的节点返回以使api容易被自己发现.

{
  "_links":{
    "self":{
      "href":"/"
    },
    "categories":[
      {
        "href":"/catalog"
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

第三个问题.添加为属性,嵌入或链接.示例"GET/catalog/food":

{
  "_links":{
    "self":{
      "href":"/catalog/food"
    }
  },
  "name":"food",
  "parent":"/catalog",
  "categories":[],
  "products":[
    "/products/burger",
    "/products/hot-dog"
  ]
}

{
  "_links":{
    "self":{
      "href":"/catalog/food"
    },
    "parent":{
      "href":"/catalog"
    },
    "categories":[

    ],
    "products":[
      {
        "href":"/products/burger"
      }, …
Run Code Online (Sandbox Code Playgroud)

rest serialization json hateoas hal-json

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