小编D.T*_*mov的帖子

带有刷新令牌工作流问题的 Java Spring JWT

我有一些关于使用 Java Spring 的 API JWT 刷新令牌工作流的问题。

到目前为止我有这个:

  1. 用户登录到 /users/login - 如果成功,则返回带有 2 个标头的响应授权和刷新。其中包含 2 个令牌 - 一个具有 30 分钟的短到期时间,一个具有较长的 4 小时到期时间。
  2. 然后他可以使用 Authorization 标头访问所有其他端点。
  3. 如果在某个时刻访问端点,他的令牌已过期,他会收到一个错误(未经授权)。
  4. 并且必须使用他获得的刷新令牌向 /token/refresh 发出请求。

问题:

  • 我已经设置好授权令牌有一个声明:type=auth,刷新令牌有一个声明:type=refresh。区分这两个令牌的最佳方法是什么。
  • 步骤 3 中的错误(而不是未授权)应该是什么,以将其与没有有效令牌的请求区分开来
  • /token/refresh 当前不要求进行身份验证。应该是?
  • /token/refresh 端点是否应该是带有标题的 POST、带有参数的 POST 或带有标题的 GET。

java spring oauth spring-security jwt

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

Spring Security 中 Web 忽略和 Http 允许之间的区别?

这两种方法有什么区别?

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/api/**").permitAll();
}

@Override
public void configure(WebSecurity web) {
    web.ignoring().antMatchers("/api/**");
}
Run Code Online (Sandbox Code Playgroud)

在 spring 安全配置类中,当我使用 HttpSecurity 时,它仍然给我 403 禁止,但是当我使用 WebSecurity 时,它通过得很好?这是为什么?我觉得我几乎无法控制什么是允许的,什么是需要通过过滤器授权的。

java spring spring-mvc spring-security spring-boot

8
推荐指数
2
解决办法
6372
查看次数

使用 application.properties 在 Spring 中配置枚举

我有以下枚举:

public enum MyEnum {
    NAME("Name", "Good", 100),
    FAME("Fame", "Bad", 200);

    private String lowerCase;
    private String atitude;
    private long someNumber;

    MyEnum(String lowerCase, String atitude, long someNumber) {
        this.lowerCase = lowerCase;
        this.atitude = atitude;
        this.someNumber = someNumber;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想使用 application.properties 文件为枚举的两个实例设置不同的 someNumber 变量。这是可能的,如果不是,我应该使用抽象类/接口将它分成两个类进行抽象吗?

java enums spring spring-boot

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

Spring Cloud Gateway 用于复合 API 调用?

我开始构建一个微服务 API 网关,并且正在考虑使用 Spring Cloud 来帮助我进行路由。但某些对网关 API 的调用将需要对不同服务发出多个请求。

假设我有 2 项服务:订单详细信息服务送货服务。我想要一个网关端点GET /orders/{orderId}来调用订单详细信息服务,然后调用交付服务,并将两者结合起来以返回完整的订单详细信息和交付。这可以通过 Spring Cloud 的路由实现吗?或者我应该使用 RestTemplate 之类的东西手动进行这些调用?

java spring spring-mvc spring-boot spring-cloud

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

Spring DevTools 未包含在 spring-boot-maven-plugin 打包的 fat jar 中

我正在尝试使用 spring-boot 插件创建一个胖罐子。但它一直给我 NoClassDefFound 异常。

我的 pom 中有以下内容:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <mainClass>${start-class}</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
Run Code Online (Sandbox Code Playgroud)

我用它打包

mvn clean package spring-boot:repackage
Run Code Online (Sandbox Code Playgroud)

,我也试过

mvn clean install spring-boot:repackage
Run Code Online (Sandbox Code Playgroud)

当我稍后尝试运行它时

java -jar myapp.jar
Run Code Online (Sandbox Code Playgroud)

它给了我以下异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/boot/devtools/filewatch/FileChangeListener
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getDeclaredMethod(Unknown Source) …
Run Code Online (Sandbox Code Playgroud)

java spring jar spring-boot

5
推荐指数
1
解决办法
1660
查看次数

quarkus 使用什么应用服务器?

启动 quarkus jar 时,我没有看到任何服务器启动,我看到的是:

C:\Java Projects\quarkus-demo\target>java -jar quarkus-demo-1.0-SNAPSHOT-runner.jar
2020-01-04 18:25:54,199 WARN  [io.qua.net.run.NettyRecorder] (Thread-1) Localhost lookup took more than one second, you ne
ed to add a /etc/hosts entry to improve Quarkus startup time. See https://thoeni.io/post/macos-sierra-java/ for details.
2020-01-04 18:25:54,521 INFO  [io.quarkus] (main) quarkus-demo 1.0-SNAPSHOT (running on Quarkus 1.1.0.Final) started in 3.
231s. Listening on: http://0.0.0.0:8080
2020-01-04 18:25:54,522 INFO  [io.quarkus] (main) Profile prod activated.
2020-01-04 18:25:54,522 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jackson]
Run Code Online (Sandbox Code Playgroud)

这意味着什么?不是使用应用服务器吗?Quarkus 是应用服务器还是类似的东西?我似乎无法在网上找到有关此的任何信息。

java quarkus

4
推荐指数
2
解决办法
3015
查看次数

将 Spring Boot 2.5.2 升级到 2.6.3 会破坏所有基于投影的 JPA 查询

当我尝试将应用程序的 Spring Boot 从 2.5.2 升级到 2.6.3 时,所有基于投影的 JpaRepository 查询都无法生成,如下所示:

......
......
......

Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.misc.project.ProjectRepository.getProjectionByIdAndField(java.lang.String,java.lang.String)! null
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:96)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:113)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:254)
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:87)
    at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.lookupQuery(QueryExecutorMethodInterceptor.java:102)
    ... 85 common frames omitted
Caused by: java.lang.NullPointerException: null
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.complete(JpaQueryCreator.java:181)
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.complete(JpaQueryCreator.java:152)
    at org.springframework.data.jpa.repository.query.JpaQueryCreator.complete(JpaQueryCreator.java:59)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:95)
    at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:81)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.<init>(PartTreeJpaQuery.java:217)
    at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:92)
    ... 89 common frames omitted
Run Code Online (Sandbox Code Playgroud)

方法如下:

Optional<SomeProjection> getProjectionByIdAndField(String id, String field);
Run Code Online (Sandbox Code Playgroud)

投影是基于接口的,如下所示:

public interface SomeProjection {
  Long getSomething();
}
Run Code Online (Sandbox Code Playgroud)

如果我使用 …

spring spring-data spring-data-jpa spring-boot

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

模板模式,但其中一个类未实现该方法

我正在尝试实现模板方法模式,但我需要一些细微的变化,我认为这不是最佳实践。我有以下课程结构

abstract class AbsClass {
    public void algorithm(){
        step1();
        step2();
    }
    private void step1() {
        //implementation
    }

    protected abstract void step2();
}

class A extends AbsClass {
    protected void step2() {
        // With implementation
    }
}

class B extends AbsClass {
    protected void step2() {
        // No implementation needed
    }
}
Run Code Online (Sandbox Code Playgroud)

在实际情况中,我有大约 4 个类,其中一个类不需要实现第二步。我认为将方法留空并不是一个好的做法。我想在其中添加评论(说不需要实施),但我认为这不是正确的解决方案。还有另一种我没有看到的方法吗?

java oop design-patterns

0
推荐指数
1
解决办法
1211
查看次数