Я создаю свой первый веб-сервис, используя spring и hibernate. Я создал логин и хочу защитить его сейчас, используя spring security. Я просмотрел учебные пособия и на их основе пытался защитить свой веб-сайт.Однако с плохими результатами.Я создал базу данных на роль пользователей и файл конфигурации Springa Security.Проблема возникает, когда, например, адрес «/ my-account / basket» доступен только для пользователей с ролью пользователя.После входа в систему, когда я нажал на ссылку «/ my-account / basket», приложение переместило меня на панель входа. Как я могу это исправить. Любое предложение будет полезно.
Таблицы базы данных:
<code>
| login | CREATE TABLE <code>login</code> (
<code>id</code> int(11) NOT NULL AUTO_INCREMENT,
<code>login</code> varchar(50) NOT NULL,
<code>password</code> varchar(50) NOT NULL,
<code>repeatpassword</code> varchar(50) NOT NULL,
<code>email</code> varchar(100) NOT NULL,
PRIMARY KEY (<code>id</code>)
)</p>
<p>| userroles | CREATE TABLE <code>userroles</code> (
<code>id_user_roles</code> int(11) NOT NULL AUTO_INCREMENT,
<code>id</code> int(11) DEFAULT NULL,
<code>rolename</code> varchar(20) NOT NULL,
PRIMARY KEY (<code>id_user_roles</code>),
KEY <code>id</code> (<code>id</code>),
CONSTRAINT <code>userroles_ibfk_1</code> FOREIGN KEY (<code>id</code>) REFERENCES <code>login</code> (<code>id</code>)
)
Контроллер:
</p>
<pre><code>@Controller("Logowanie")
@ RequestMapping (value = "/ my-account") открытый класс Login {
@Autowired
private UserService userService;
@RequestMapping(value ="/sign-in")
public String Login(Model model){
User user = new User();
model.addAttribute("getUser",user);
return "login-page";
}
@RequestMapping("/processForm")
public String showLoginPage(@Valid @ModelAttribute("getUser") User user, BindingResult result, ModelMap modelMap, HttpSession httpSession) throws NullPointerException{
if(result.hasErrors()) {
if(userService.matchPasswords(user)){
httpSession.setAttribute("login",user.getLogin());
return "redirect:/my-account/user";
}
else {
modelMap.addAttribute("message", "Nie poprwane logowanie");
return "redirect:/my-account/error";
}
}
else {
modelMap.addAttribute("message","Zaloguj sie ponownie: Nie podales loginu lub hasla");
return "redirect:/my-account/error";
}
}
}
Конфигурация безопасности пружины:
</p>
<pre><code> @Autowired
private DataSource dataSource;
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception{
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select login,password,repeatpassword,email from login where login = ?")
.authoritiesByUsernameQuery("select l.login , ur.rolename from login l, userroles ur where l.id=ur.id and l.login = ?");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/my-account/basket")
.hasAuthority("user")
.anyRequest()
.permitAll()
.and()
.formLogin()
.loginPage("/my-account/sign-in")
.loginProcessingUrl("/my-account/processForm")
.defaultSuccessUrl("/my-account/user")
.failureUrl("/my-account/error")
.usernameParameter("Login")
.passwordParameter("Password")
.permitAll()
.and()
.logout()
.permitAll()
.and()
.csrf()
.disable();
}