【问题标题】:integrate spring security and spring MVC and and spring integration with each other集成 spring security 和 spring MVC 以及 spring 相互集成
【发布时间】:2023-01-30 23:30:56
【问题描述】:

我目前正在开发一个网站,以便在春季之前控制物联网设备。
该应用程序基于 spring boot。
我通过从数据JPA.
下一步我必须在我的应用程序中实现 TCP 连接,然后做一些 我采用的研究春季整合为此,简单的应用程序运行良好。
接下来,我决定将 spring Integration 添加到我的应用程序中,仅用于用户身份验证,之后我配置了我意识到存在一些冲突
在我的申请中,我收到了java: 无法访问未找到 javax.servlet.Filter 的 javax.servlet.Filter 类文件.
我做了一些研究,找到了 spring webflux 的相关主题,据说我应该为 webflux(在这种情况下为集成)而不是为 spring web 实现 spring 安全。
现在关于主要问题:正如我之前所说,应用程序的结构应该是这样的:
1-第一部分是基于 MVC 的,有一些网页和数据应该存储在 mySql 或 mariaDB 中,我还想通过 spring security 对用户进行身份验证和授权。
应用程序的第二部分是通过 Netty 或 spring 集成实现 Tcp 套接字,以便在物联网设备和服务器之间建立有效连接。

现在我正在寻找一种能够对 spring 说它应该区分的方法 这两个不同的上下文彼此不同,并且不将配置与另一个结合,而它们必须相互配合。

有什么办法可以让这种分离并告诉 spring 将它们结合起来并分别对它们负责?

请注意,添加以下依赖项并没有改变任何东西

    `<dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>`

其他依赖项:

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

    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-ip</artifactId>
        <scope>compile</scope>
    </dependency>
    
    <dependency>
        <groupId>org.mariadb.jdbc</groupId>
        <artifactId>mariadb-java-client</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    </dependency>

安全配置:

 @Configuration
 @EnableWebSecurity
 public class securityConfig extends WebSecurityConfigurerAdapter {

@Autowired
appUserDetailService appUserDetailService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(appUserDetailService);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/admin").hasRole("ADMIN")
            .antMatchers("/user").hasAnyRole("ADMIN", "USER")
            .antMatchers("/","/home").permitAll()
            .and().formLogin();
}

@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
    return new BCryptPasswordEncoder();
}

}

发生的错误:

java: 无法访问未找到 javax.servlet.Filter 的 javax.servlet.Filterclass 文件

并指向 spring 安全配置的第一行。
我的应用程序属性:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.datasource.url=jdbc:mariadb://localhost:3307/testapp
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
server.port=8081
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

【问题讨论】:

  • 您应该确保为 Jakarta EE 使用 Spring Boot 3.0.1
  • 3.0.2 是最新的。
  • 谢谢你的建议。我添加了最新版本的所有依赖项,但没有任何改变。我听说过很多关于你们俩的事,很高兴有机会与你们交谈。有什么方法可以配置 spring web Security 并相互集成吗?
  • 您可能正在使用一些与 JEE 9/10 不兼容的其他依赖项(类现在位于 jakarta 命名空间而不是 javax 中)。查看完整的堆栈跟踪以找出哪个组件正在尝试使用旧类。
  • 错误来自:/C:/Users/s.movahedi/Downloads/t1/demo/src/main/java/com/example/demo/security/securityConfig.java:[17,8] 无法访问 javax.servlet找不到 javax.servlet.Filter 的 .Filter [ERROR] 类文件

标签: spring spring-boot spring-security spring-data-jpa spring-integration


【解决方案1】:

/C:/Users/s.movahedi/Downloads/t1/demo/src/main/java/com/example/demo/security/securityConfig.java:[17,8] cannot access javax.servlet.Filter [ERROR] class file for javax.servlet.Filter not found

因此,如果您想使用 Boot 3、Spring 6,您的演示应用程序需要更改为使用 jakarta 而不是 javax

【讨论】:

    猜你喜欢
    • 2014-07-02
    • 2013-01-11
    • 2012-04-07
    • 1970-01-01
    • 2018-02-23
    • 2021-04-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多