#java #spring-boot #spring-mvc #spring-security
#java #весенняя загрузка #spring-mvc #весна-безопасность
Вопрос:
Я использую spring-boot-starter-security amp; validation-api для своего проекта. Ранее мой проект работал правильно, пользователь мог быть зарегистрирован на странице регистрации, и данные правильно сохранялись в базе данных. Для входа в систему я создал пользовательскую страницу входа, и я смог войти в систему, но я не знаю, какая произошла ошибка. Теперь он показывает ошибку stackoverflow
UserController.java
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
UserRepository userRepository;
@ModelAttribute
public void addCommonData(Model model,Principal principal) {
String userName = principal.getName();
User user = userRepository.getUSerByUserName(userName);
//debug in console
System.out.println("user " user);
model.addAttribute("user",user);
}
@RequestMapping("/index")
public String dashboard(Model model ,Principal principal) {
model.addAttribute("title","User Dashboard");
return "normal/user_dashboard";
}
@GetMapping("/add-contact")
public String openAddContactForm(Model model) {
model.addAttribute("title", "Add Contact");
model.addAttribute("contact",new Contact());
return "normal/add_contact_form";
}
}
Myconfig.java
@Configuration
@EnableWebSecurity
public class MyConfig extends WebSecurityConfigurerAdapter{
@Bean
public UserDetailsService getUserDetailsService() {
return new UserDetailsServiceImp();
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
daoAuthenticationProvider.setUserDetailsService(this.getUserDetailsService());
daoAuthenticationProvider.setPasswordEncoder(passwordEncoder());
return daoAuthenticationProvider;
}
//Configure method
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/**").permitAll()
.and().formLogin()
.loginPage("/signin")
.loginProcessingUrl("/dologin")
.defaultSuccessUrl("/user/index")
.and().csrf().disable();
}
}
Я не понял, где произошла ошибка. Пожалуйста, помогите, и я также могу предоставить код реализации интерфейса UserDetails amp; UserDetailsService.
я использую следующие зависимости
1.spring-boot-starter-data-jpa
2.spring-boot-starter-thymeleaf
3.spring-boot-starter-web
4.spring-boot-starter-security 5.spring-boot-devtools
6.проверка-api
7. спящий режим-валидатор
8.mysql-connector-java
для части авторизации я предоставил код в Myconfig.java .. пожалуйста, помогите, я не могу понять, в чем ошибка
error
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sun Nov 15 21:48:55 NPT 2020
There was an unexpected error (type=Internal Server Error, status=500).
No message available
java.lang.StackOverflowError
URL-адрес и действие форм все правильные..
HomeController.java for remaining pages and request
@Controller
public class HomeController {
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Autowired
UserRepository userRepo;
@RequestMapping("/")
public String home(Model model) {
model.addAttribute("title","Home-Smart Contact Manager");
return "home";
}
@RequestMapping("/about")
public String about(Model model) {
model.addAttribute("title","About-Smart Contact Manager");
return "about";
}
@RequestMapping("/signup")
public String signup(Model model) {
model.addAttribute("title","Register-Smart Contact Manager");
model.addAttribute("user",new User());
return "signup";
}
//hander for registering user
@RequestMapping(value="/do_register",method=RequestMethod.POST)
public String registerUser(@Valid @ModelAttribute("user")User user,BindingResult result ,
@RequestParam(value="agreement",defaultValue="false") boolean agreement,
Model model, HttpSession session)
{
try {
//check gryoki nai vnyrw validation nai ho
if(!agreement)
{
System.out.println("you haven't agreed the terms and conditions");
throw new Exception("You haven't agreed the terms and conditions");
}
//if invalid data pathako xa vnya error aauxa
if(result.hasErrors()) {
model.addAttribute("user",user); //we have send user obj to the view
return "signup";
}
//yadi error xa vana back to the form with user input data sajilo
user.setRole("ROLE_USER");
user.setEnabled(true);
user.setImageUrl("default.png");
user.setPassword(passwordEncoder.encode(user.getPassword()));
System.out.println("agreement " agreement);
System.out.println("User " user);
User result1 = this.userRepo.save(user);
model.addAttribute("user",new User());
session.setAttribute("message", new Message("Successfully Registered!!","alert-success"));
return "signup";
}
catch(Exception e)
{
e.printStackTrace();
model.addAttribute("user",user);
session.setAttribute("message", new Message("Something Went Wrong !! " e.getMessage(),"alert-danger"));
return "signup";
}
}
//handler for custom login
@GetMapping("/signin")
public String customLogin(Model model) {
model.addAttribute("title","Login Page - Smart Contact Manager");
return "login";
}
}
Комментарии:
1. Добавьте еще немного информации о проекте, если вы используете thymeleaf или velocity, есть ли какие-либо другие настройки или фильтры.
2. Зависимости 1.spring-boot-starter-data-jpa 2.spring-boot-starter-thymeleaf 3.spring-boot-starter-web 4.spring-boot-starter-security 5.spring-boot-devtools 6.validation-api 7.hibernate-validato 8.mysql-соединитель-java .