当前位置: 首页 > 知识库问答 >
问题:

403使用具有Spring Security性的Vaadin的CSRF令牌错误

宰父单弓
2023-03-14

我试图在vaadin应用程序中实现Spring Security性,但我有一个问题,在登录到页面后,它显示了一个错误:

{“status”:403,“error”:“Forbidden”,“message”:“无法验证提供的CSRF令牌,因为找不到您的会话。”,“path”:“/>

我尝试了很多东西,但都不管用,下面是我的标准安全配置类:

//SecurityConfig.java    
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
            .withUser("user")
            .password("password")
            .roles("USER");
    }
}

控制器类:

//HomeController.java
@RestController
public class HomeController {

    @GetMapping("/")
    public String index() {
        return "Welcome to the home page!";
    }

@GetMapping("/error")
public String error(){
    return "Error!";
}

}

和Vaadin UI类

//VaadinUI.java
@SpringUI
public class VaadinUI extends UI {
    VerticalLayout layout = new VerticalLayout();

    com.vaadin.ui.Label label = new com.vaadin.ui.Label("Witaj");

    @Autowired
    public VaadinUI() {}

   @Override
   protected void init(VaadinRequest request) {
       setContent(layout);
       layout.addComponent(label);
   }

}

和我的pom.xml

//pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>example.com</groupId>
        <artifactId>LDAPSpringInitializr</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>

        <name>LDAPSpringInitializr</name>
        <description>Demo project for Spring Boot</description>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <vaadin.version>8.0.5</vaadin.version>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-ldap</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
            <dependency>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

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

        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.vaadin</groupId>
                    <artifactId>vaadin-bom</artifactId>
                    <version>${vaadin.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>


    </project>

如何在spring security中使用Vaadin?我想稍后将Spring Security性与LDAP连接起来。

共有1个答案

斜浩穰
2023-03-14

我对瓦丁不太熟悉,但这篇帖子https://vaadin.com/blog/-/blogs/filter-based-spring-security-in-vaadin-applications表明Vaadin已经提供了CSRF保护,因此您可以在Spring通过

@Override
protected void configure(final HttpSecurity httpSecurity) throws Exception {
    httpSecurity.csrf().disable();
}

在您的安全配置中。

 类似资料:
  • 此文件包含上载文件的表单 上传orm.jsp 我的控制器方法是 我上传时出现以下错误: HTTP状态403-在请求参数“\u CSRF”或标头“X-CSRF-Token”上发现无效的CSRF令牌“null” 我也用过Spring安全。但是我总是给出同样的错误。我尝试了很多,但无法解决它。你能帮忙解决这个问题吗?

  • 问题内容: 我已经在SO上看到了很多,但是没有什么可以解决我的问题。 问题: 启用CSRF中间件后,Django在AJAX表单请求中回复403,并指出: “未设置CSRF cookie。” 根据文档,实现了JS功能,该功能设置了自定义 “ X-CSRFToken” 标头。 它按预期工作,从浏览器获取 “ csrftoken” cookie并将其与AJAX请求一起发布: 但是响应仍然是403。 尝试

  • 我在我的应用程序中构建了CSRF保护,只需在每个页面加载上生成一个随机令牌,将其放入会话,然后将令牌绑定到

  • 我读到,当使用JWT时,不需要防止CSRF攻击,例如:“由于您不依赖cookie,您不需要防止跨站点请求”。 但是,有一点我不明白:如果我将令牌存储在localStorage中(正如我在同一网站的教程中被告知的那样),那么攻击者如何防止通过读取我的localStorage而不是Cookie来伪造恶意请求呢? 由于它是在服务器端生成的,我不知道如何在客户机请求中使用令牌而不将其存储在客户机的某个地方

  • 问题内容: 我正在尝试在我的项目中实现csrf保护,但无法使其与jQuery Ajax一起使用。(不过,它适用于普通的帖子请求) 如果在发送表单之前使用chrome开发工具篡改令牌,则仍会看到“正在处理数据”文本,而不是错误。 app.js send.jade test.js 问题答案: 在有效负载消息中发送CSRF令牌: 为了简化您的工作,我认为您可以创建一个Jquery插件来执行此操作,如下所

  • 示例: 爱丽丝通过浏览器登录到“https://example.com”(使用cookie)。我想,她使用的是现代浏览器。 爱丽丝访问“https://evil.com”,而evil.com的客户端代码对“https://example.com”执行某种请求(经典CSRF场景)。 所以: null null