0

我有一个带有安全性、devtools、vaadin 和嵌入式 tomcat 的 Spring Boot 应用程序。

我已经根据本指南配置了 Spring 安全性:VAADIN-securering-your-app-with-spring-security它运行良好,我可以登录......等等,但是当我改变一些东西并且我想重新加载时,服务器重新启动,但无法反序列化持久会话,并提示我再次登录。

反序列化错误是指 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 的主体字段,在我的例子中是 String。

请参阅下面的详细信息。

构建.gradle:

plugins {
    id 'org.springframework.boot' version '2.4.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'com.vaadin' version '20.0.2'
    id 'java'
    id 'war'
}

...

ext {
    set('vaadinVersion', "20.0.2")
}

...

dependencies {
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    implementation 'com.vaadin:vaadin-spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'

...
}

应用程序属性:

vaadin.servlet.productionMode=false
server.servlet.session.persistent=true
server.tomcat.basedir=/tmp
spring.devtools.restart.poll-interval=3s
spring.devtools.restart.quiet-period=2s

身份验证提供者:

...
@Override
public Authentication authenticate(Authentication authentication)
        throws AuthenticationException {
    String name = authentication.getName();
    String password = authentication.getCredentials().toString();
    authService.authenticate(name, password);
    List<GrantedAuthority> authorities = authService.getAuthorities(name);
    return new UsernamePasswordAuthenticationToken(name, password, authorities);
}

错误:

无法反序列化会话属性 [com.vaadin.flow.server.VaadinSession.springServlet]

java.io.InvalidClassException: org.springframework.security.authentication.UsernamePasswordAuthenticationToken; java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:807) 的字段主体的无效描述符 ~[na:1.8.0_202] 在 java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:891) ~[na:1.8.0_202 ] 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1857) ~[na:1.8.0_202] 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751) ~[na:1.8.0_202] 在 java. io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042) ~[na:1.8.0_202] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573) ~[na:1.8.0_202] at java.io.ObjectInputStream。 defaultReadFields(ObjectInputStream.java:2287) ~[na:1.8.0_202] at java.io.ObjectInputStream.readSerialData(ObjectInputStream.

4

0 回答 0