不支持请求方法“GET”。为啥我会收到此错误?
Posted
技术标签:
【中文标题】不支持请求方法“GET”。为啥我会收到此错误?【英文标题】:Request method 'GET' not supported. Why am I getting this error?不支持请求方法“GET”。为什么我会收到此错误? 【发布时间】:2021-08-01 04:53:50 【问题描述】:我无法登录网站。给出错误消息。已解决 [org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“GET”] 好像什么都没忘记……用户注册成功,但是无法授权。告诉我我做错了什么? Сlass WebSecurityConfig
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
UserService userService;
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder()
return new BCryptPasswordEncoder();
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception
httpSecurity
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
//Доступ только для не зарегистрированных пользователей
.antMatchers("/","/index","/login","/registration").permitAll()
//Доступ только для пользователей с ролью Администратор
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/blog").hasRole("USER")
//Все остальные страницы требуют аутентификации
.anyRequest().authenticated()
.and()
//Настройка для входа в систему
.formLogin()
.loginPage("/login")
//Перенарпавление на главную страницу после успешного входа
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll()
.logoutSuccessUrl("/");
@Autowired
protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder());
@Override
public void configure(WebSecurity web) throws Exception
web.ignoring().antMatchers("/resources/**", "/static/**",
"/css/**", "/js/**", "/images/**","/vendor/**","/fonts/**").anyRequest();
类用户服务
@Service
public class UserService implements UserDetailsService
@Autowired
public UserRepository userRepository;
@Autowired
public RoleRepository roleRepository;
@Autowired
public BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
User user = userRepository.findByUsername(username);
if (user == null)
throw new UsernameNotFoundException("Пользователь не найден");
return user;
public User findUserById(Long userId)
Optional<User> userFromDb = userRepository.findById(userId);
return userFromDb.orElse(new User());
public List<User> allUsers()
return userRepository.findAll();
public boolean saveUser(User user)
User userFromDB = userRepository.findByUsername(user.getUsername());
if (userFromDB != null)
return false;
user.setUsername(user.getUsername());
user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepository.save(user);
return true;
public boolean deleteUser(Long userId)
if (userRepository.findById(userId).isPresent())
userRepository.deleteById(userId);
return true;
return false;
类输入控制器
@Controller
public class InputController
//@GetMapping("/login")
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login()
return "login";
登录.html
<div class="container">
<div class="row main-form">
<form class="" method="post" action="/login" modelAttribute="userForm">
<div class="form-group">
<label for="username" class="cols-sm-2 control-label">Ваш Логин</label>
<div class="cols-sm-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-users fa" aria-hidden="true"></i> </span>
<input type="text" class="form-control" name="username" id="username" placeholder="Введите ваш логин"/>
</div>
</div>
</div>
<div class="form-group">
<label for="password" class="cols-sm-2 control-label">Пароль</label>
<div class="cols-sm-10">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<input type="password" class="form-control" name="password" id="password" placeholder="Введите ваш пароль"/>
</div>
</div>
</div>
<div class="form-group ">
<input type="submit" value="Войти"id="button" class="btn btn-primary btn-lg btn-block login-button" />
</div>
</form>
</div>
</div>
看来我写的都是正确的,我不明白是什么问题……
【问题讨论】:
包括导致该错误的请求的详细信息。 您有一个发送post
请求的按钮和一个需要get
的方法 - 为什么您认为它应该工作?这是很好的article 关于您的问题
请发布完整的 Spring 调试日志以及来自开发控制台(F12 -> 网络)的网络浏览器中请求的日志,而不是猜测,
【参考方案1】:
我复制了您的设置,405 Method Not Allowed 是由您发布的代码中的.anyRequest()
引起的。通过在WebSecurity
的web.ignoring()
末尾添加它,您将指示Spring Security 的过滤器链忽略所有请求。 405 特别是因为没有 Spring Security(因为它被任何请求忽略),您在应用程序中实现了 GET /login,但没有实现 POST /login。
Spring Security 文档中HttpFirewall 的主题可能对您有所帮助。
【讨论】:
如果您删除.anyRequest()
,是否解决了您的问题?如果是这样,您介意接受答案吗?谢谢。
如果我删除 .anyRequest(),然后我得到错误 999。我尝试然后添加 web.ignoring() "/error",但结果是一堆错误。例如样式未应用或身份验证成功后,主页的位置在浏览器中打开样式文件 css
您能否更具体地说明您收到 999 的地点?发布的 login.html 是整个文件还是您省略了一部分?【参考方案2】:
我假设您在尝试导航到登录页面时遇到了错误。 /login 是默认的登录处理 URL,Spring 期望它是一个 POST。这可以用 formLogin().loginProcessingUrl() 改变,但我不怀疑你想这样做。更改您的 get 映射、您的 ant 匹配器和 .loginPage("/login") 以使用 /loginPage 之类的内容。
【讨论】:
不,当我已经输入用户名和密码并按下登录按钮时出现错误 Spring Security 使用GET /login
来检索登录表单。这是由 Spring Security 以基本格式自动提供的,可以完全按照 OP 演示的方式替换。
我不太明白在这种情况下我有什么问题以上是关于不支持请求方法“GET”。为啥我会收到此错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我会收到 UnsafeMutablePointer 错误?