我有一些关于使用 Java Spring 的 API JWT 刷新令牌工作流的问题。
到目前为止我有这个:
问题:
这两种方法有什么区别?
@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 时,它通过得很好?这是为什么?我觉得我几乎无法控制什么是允许的,什么是需要通过过滤器授权的。
我有以下枚举:
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 变量。这是可能的,如果不是,我应该使用抽象类/接口将它分成两个类进行抽象吗?
我开始构建一个微服务 API 网关,并且正在考虑使用 Spring Cloud 来帮助我进行路由。但某些对网关 API 的调用将需要对不同服务发出多个请求。
假设我有 2 项服务:订单详细信息服务和送货服务。我想要一个网关端点GET /orders/{orderId}来调用订单详细信息服务,然后调用交付服务,并将两者结合起来以返回完整的订单详细信息和交付。这可以通过 Spring Cloud 的路由实现吗?或者我应该使用 RestTemplate 之类的东西手动进行这些调用?
我正在尝试使用 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) 启动 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 是应用服务器还是类似的东西?我似乎无法在网上找到有关此的任何信息。
当我尝试将应用程序的 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)
如果我使用 …
我正在尝试实现模板方法模式,但我需要一些细微的变化,我认为这不是最佳实践。我有以下课程结构
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 ×7
spring ×6
spring-boot ×5
spring-mvc ×2
enums ×1
jar ×1
jwt ×1
oauth ×1
oop ×1
quarkus ×1
spring-cloud ×1
spring-data ×1