Перенаправление контроллера приводит к ошибке 403 «Тип = Запрещено» - PullRequest
0 голосов
/ 02 апреля 2019

Я настраиваю серверный веб-сайт для универсального проекта, и у меня возникает проблема, когда речь идет о добавлении нового пользователя, который добавит пользователя в базу данных, а затем перенаправит пользователя встраница профиля.Но когда я отправляю форму, она вызывает ошибку 403, которая, судя по прочитанному мною чтению, указывает на то, что он не может получить доступ к странице по какой-либо причине.

Я совершенно уверен, что это не связано смоя конфигурация безопасности (каталог "src / java / pokedex / config / securityConfig.java"), хотя я добавлю ее в случае:

package pokedex.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class securityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    }
}

Другие ссылки в файле, кажется, работают, и яможет получить доступ к странице профиля из навигационной панели, это просто перенаправление, которое вызывает проблемы.

Это (я думаю) соответствующий код для контроллера (каталог "src / java / pokedex / controllers / RegistrationController.java")"):

    public String processRegistration(User user) {
        registrationService.addUser(user);
        return "redirect:/profile";
    }

    @RequestMapping(value = "/profile")
    public ModelAndView showProfile() {

        return new ModelAndView("/profile", "user",
                registrationService.getCurrentUser() != null
                        ? registrationService.getCurrentUser()
                        : new User("John", "Doe", "johndoe@placeholder.co.uk", "password"));
    }

С реализацией registrationService (каталог" src / java / pokedex / services / RegistrationServiceImpl.java ") предоставляется:

package pokedex.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pokedex.dao.UserRepository;
import pokedex.entities.User;

@Service
public class RegistrationServiceImpl implements RegistrationService {

    private UserRepository userRepository;
    private User currentUser;

    @Autowired
    public RegistrationServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;

        userRepository.save(new User("john", "doe", "john@doe.com", "password"));
    }

    @Override
    public List<User> getUsers() {
        return userRepository.findAll();
    }

    @Override
    public void addUser(User user) {
        currentUser = user;
        userRepository.save(user);
    }

    @Override
    public User getCurrentUser() {
        return currentUser;
    }

    @Override
    public int getNumberOfUsers() {
        return (int) userRepository.count();
    }
}

Что касается страниц, токаталог страницы профиля - "src / resources / templates / profile.html", а страница регистрации - "src / resources / templates / register.html".

Часть, которая может вызывать проблему в profile:

<article>
        <section class="profile">
            <fieldset>
                <legend>User Information</legend>
                <table>
                    <tr>
                        <td><label>Name:</label></td>
                        <td th:text="${user.firstName} ?: 'John'">John</td>
                        <td th:text="${user.lastName} ?: 'Doe'">Doe</td>
                    </tr>
                </table>
                <table>
                    <tr>
                        <td><label>Email:</label></td>
                        <td th:text="${user.email} ?: 'johndoe@placeholder.com'">johndoe@placeholder.com</td>
                    </tr>
                </table>
            </fieldset>
        </section>
    </article>

Хотя регистрационная часть в реестре:

<article>
        <section class="registration">
            <form action="/register" method="post" th:object="${user}">
                <fieldset>
                    <legend>User Information</legend>
                    <table>
                        <tr>
                            <td><label>First name:</label></td>
                            <td><input type="text" th:field="*{firstName}"/></td>
                        </tr>
                        <tr>
                            <td><label>Last name:</label></td>
                            <td><input type="text" th:field="*{lastName}"/></td>
                        </tr>
                        <tr>
                            <td><label>Email:</label></td>
                            <td><input type="email" th:field="*{email}"/></td>
                        </tr>
                        <tr>
                            <td><label>Password:</label></td>
                            <td><input type="password" th:field="*{password}"/></td>
                        </tr>
                        <tr>
                            <td></td>
                            <td><input type="submit" value="register"/></td>
                        </tr>
                    </table>
                </fieldset>
            </form>
        </section>
    </article>

Это то, что мне удалось объединить самостоятельно, и я думаю, что проблемы могут лежать, если у кого-либо есть какие-либо предложения или он хочет увидеть больше кода, который я с радостью предоставлю.

Я заметил, когда загружал это, что IDE (Intellij IDEA) говорил, что не распознает пользовательские поля.(?) в профиле, но это не имеет проблемы с другими объектами, но, насколько я могу судить, они функционально идентичны, так что это может быть перебор.

Если кто-то может указать мне вправильное направление, чтобы избавиться от ошибки, я очень ценю это.

1 Ответ

0 голосов
/ 02 апреля 2019

Хорошо, похоже, это был еще один случай добавления книги «прочитайте 5 минут в лекцию», оказалось, что это была защита, (простое) исправление было добавить:

http.csrf().disable();
http.headers().frameOptions().disable();

Кметод настройки httpSecurity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...