Java 请求方法';获取';不支持。为什么我会犯这个错误?

Java 请求方法';获取';不支持。为什么我会犯这个错误?,java,spring,spring-boot,spring-security,spring-data-jpa,Java,Spring,Spring Boot,Spring Security,Spring Data Jpa,我无法登录该网站。给出了一条错误消息。已解决[org.springframework.web.HttpRequestMethodNotSupportedException:请求方法'GET'不受支持] 我似乎没有忘记任何事情……用户成功注册,但他无法授权。告诉我我做错了什么? Сlass网站安全配置 @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) public class

我无法登录该网站。给出了一条错误消息。已解决[org.springframework.web.HttpRequestMethodNotSupportedException:请求方法'GET'不受支持] 我似乎没有忘记任何事情……用户成功注册,但他无法授权。告诉我我做错了什么? Сlass网站安全配置

@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;
}
}
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>

Ваш Логин
Пароль

似乎我写的一切都是正确的,我不明白问题出在哪里…

我假设您在尝试导航到登录页面时遇到了错误/login是默认的登录处理URL,Spring希望它是一个POST。这可以用formLogin()来更改。loginProcessingUrl()但是我不怀疑您想要这样做。将get映射、ant matcher和.loginPage(“/login”)更改为使用类似于/loginPage的内容。

我复制了您的设置,405方法不允许是由您发布的代码中的
.anyRequest()
引起的。通过在
WebSecurity
web.ignering()
的末尾添加该选项,可以指示Spring Security的筛选器链忽略所有请求。405特别来自这样一个事实:在没有Spring安全性的情况下(因为任何请求都会忽略它),您已经在应用程序中实现了GET/login,而不是POST/login


Spring Security docs上的主题可能对您有所帮助。

包括导致该错误的请求的详细信息。您有一个发送
post
请求的按钮和一个期望
get
的方法-您认为它为什么会起作用?这是关于你的问题而不是猜测的好消息,请发布你的完整spring调试日志,以及来自开发控制台(F12->network)的webbrowser中请求的日志否,当我已经输入用户名和密码并按下登录按钮时,我收到一个错误提示安全性使用
get/login
检索登录表单。这是由Spring Security以基本格式自动提供的,可以完全按照OP演示的方式替换。我不太明白在这种情况下我有什么问题。如果删除
。anyRequest()
,它是否解决了您的问题?如果是,你介意接受这个答案吗?谢谢。如果我删除.anyRequest(),那么我会得到错误999。然后我尝试添加web.ignorering()“/error”,但后来发现了一堆bug。例如,未应用样式或成功验证后,主页的位置会在浏览器中打开样式文件css。您可以更具体地说明接收999的位置吗?发布的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>