Spring Security出现java: cannot find symbol错误求助
问题
运行Spring Boot应用时抛出java: cannot find symbol错误,核心提示找不到com.project.questapp.services.UserDetailsServiceImpl类,共出现8个错误,其中3个为此类找不到的错误。已检查报错类的路径未发现问题,单独执行pom.xml也正常。附上SecurityConfig代码及pom.xml配置,询问错误原因。
SecurityConfig代码
package com.project.questapp.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import com.project.questapp.security.JwtAuthenticationEntryPoint; // 引发错误 import com.project.questapp.security.JwtAuthenticationFilter; // 引发错误 import com.project.questapp.services.UserDetailsServiceImpl; // 引发错误 @Configuration @EnableWebSecurity public class SecurityConfig{ private UserDetailsServiceImpl userDetailsService; private JwtAuthenticationEntryPoint handler; public SecurityConfig(UserDetailsServiceImpl userDetailsService, JwtAuthenticationEntryPoint handler) { this.userDetailsService = userDetailsService; this.handler = handler; } @Bean public JwtAuthenticationFilter jwtAuthenticationFilter() { return new JwtAuthenticationFilter(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { return authenticationConfiguration.getAuthenticationManager(); } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("OPTIONS"); config.addAllowedMethod("HEAD"); config.addAllowedMethod("GET"); config.addAllowedMethod("PUT"); config.addAllowedMethod("POST"); config.addAllowedMethod("DELETE"); config.addAllowedMethod("PATCH"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } @Bean public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { httpSecurity .cors() .and() .csrf().disable() .exceptionHandling().authenticationEntryPoint(handler).and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() .authorizeHttpRequests() .requestMatchers(HttpMethod.GET, "/posts") .permitAll() .requestMatchers(HttpMethod.GET, "/comments") .permitAll() .requestMatchers("/auth/**") .permitAll() .anyRequest().authenticated(); httpSecurity.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return httpSecurity.build(); } }
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.project</groupId> <artifactId>questapp</artifactId> <version>0.0.1-SNAPSHOT</version> <name>questapp</name> <description>QuestApp project for Spring Boot</description> <properties> <java.version>17</java.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-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </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-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
可能的原因及解决办法
- 类未实际创建或路径拼写错误:确认
UserDetailsServiceImpl、JwtAuthenticationEntryPoint、JwtAuthenticationFilter这几个类是否真的存在于对应包下,注意Java包名严格区分大小写,比如是否把services写成Services这类拼写失误。 - 编译缓存问题:执行
mvn clean compile清理旧编译文件后重新编译,或者用IDE的Rebuild Project功能重新构建,旧缓存的编译结果可能导致类找不到的误报。 - 依赖版本不兼容:你用的Spring Boot 3.0.4基于Jakarta EE规范,但jjwt 0.9.1是适配旧Java EE的版本,两者存在兼容性冲突。建议替换jjwt依赖为兼容版本:
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency>
- IDE源码目录配置错误:检查IDE的项目结构,确保
src/main/java被标记为Sources Root,如果被误标记为普通目录,IDE不会编译该目录下的类,导致找不到符号。 - 类未被Spring管理:确认
UserDetailsServiceImpl、JwtAuthenticationEntryPoint这两个类是否添加了@Service、@Component等Spring注解,只有被Spring扫描到的类才能被注入,否则会间接引发编译错误。
内容的提问来源于stack exchange,提问作者GreenEngineer
相关产品推荐
相关产品推荐

