我正在为uni项目建立一个基于服务器的网站,并且在添加新用户时遇到问题,该问题将用户添加到数据库中,然后将该用户重定向到个人资料页。但是,当我提交表单时,它会触发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”。
可能导致配置文件出现问题的部分是:
<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)表示它无法识别配置文件中的用户字段(?),但对于其他对象则不存在此问题,但到目前为止我可以说它们在功能上是相同的,因此可能会失败。
如果有人能指出正确的方向摆脱错误,我将不胜感激。
答案 0 :(得分:0)
好吧,看来这是添加“读5分钟到讲座”这本书的又一次事件,事实证明这是安全性,要添加一个(简单的)修复程序:
http.csrf().disable();
http.headers().frameOptions().disable();
到httpSecurity配置方法