无法访问org.springframework.web.servlet.config.annotation.CorsRegistry
时间: 2023-07-23 17:43:40 浏览: 174
您好,这个问题可能是由于缺少相关的依赖或配置导致的。您可以尝试按照以下步骤解决这个问题:
1. 确认您的项目中已经引入了Spring Web MVC相关的依赖,例如spring-webmvc、spring-context等。
2. 确认您的项目中已经进行了跨域配置,例如在WebMvcConfigurer中添加了跨域配置代码:
```
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
```
3. 如果您的项目是基于Spring Boot的,则可以通过在application.properties或application.yml中添加以下配置来解决跨域问题:
```
spring:
mvc:
cors:
enabled: true
```
希望这些信息能够帮助您解决问题。如果还有其他问题,请随时提出。
相关问题
java: 无法访问org.springframework.web.servlet.config.annotation.CorsRegistry 错误的类文件: /F:/UserYan/idea/maven/repository/org/springframework/spring-webmvc/6.0.9/spring-webmvc-6.0.9.jar!/org/springframework/web/servlet/config/annotation/CorsRegistry.class
根据您提供的错误信息,可能是由于版本不兼容导致的。具体来说,您的项目中引用的Spring Web MVC版本为6.0.9,但是实际上最新版本为5.x,其中CorsRegistry类位于org.springframework.web.servlet.config.annotation包下,而不是org.springframework.web.servlet.config.annotation.annotation包下。
解决办法如下:
1. 确认您的项目中引用的Spring Web MVC版本是否正确。建议使用最新版本的Spring Boot,它会自动管理依赖关系。
2. 如果您的项目中确实需要使用6.0.9版本的Spring Web MVC,则需要手动将CorsRegistry类从org.springframework.web.servlet.config.annotation.annotation包下移动到org.springframework.web.servlet.config.annotation包下。可以通过从源代码中复制CorsRegistry类并将其粘贴到正确的包中来实现。
希望这些信息能够帮助您解决问题。如果还有其他问题,请随时提出。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Bean public JwtTokenProvider jwtTokenProvider() { return new JwtTokenProvider(); } @Autowired private JwtTokenProvider jwtTokenProvider; @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .addFilterBefore(new JwtTokenFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class) .authorizeRequests() .antMatchers("/api/**").authenticated() .anyRequest().permitAll(); } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers(HttpMethod.OPTIONS, "/**"); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(12); } }请根据上述代码构建一个JwtTokenFilter类,让上述代码不报错
可以按照以下方式编写JwtTokenFilter类:
```
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class JwtTokenFilter extends OncePerRequestFilter {
private final JwtTokenProvider jwtTokenProvider;
private final UserDetailsService userDetailsService;
public JwtTokenFilter(JwtTokenProvider jwtTokenProvider, UserDetailsService userDetailsService) {
this.jwtTokenProvider = jwtTokenProvider;
this.userDetailsService = userDetailsService;
}
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = jwtTokenProvider.resolveToken(request);
if (token != null && jwtTokenProvider.validateToken(token)) {
UserDetails userDetails = userDetailsService.loadUserByUsername(jwtTokenProvider.getUsername(token));
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(request, response);
}
}
```
在此JwtTokenFilter类中,我们注入了JwtTokenProvider和UserDetailsService,其中JwtTokenProvider用于解析和验证JWT令牌,UserDetailsService用于获取用户详细信息。在doFilterInternal方法中,我们首先从请求中获取JWT令牌并验证其是否有效。如果令牌有效,我们使用UserDetailsService加载用户详细信息,并创建一个UsernamePasswordAuthenticationToken对象,将其设置为安全上下文的认证对象。最后,我们调用filterChain.doFilter方法继续处理请求。
阅读全文