Spring security jdbc аутентификация пользователя - PullRequest
0 голосов
/ 28 ноября 2018

Я создаю свой первый веб-сервис, используя 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();
}

1 Ответ

0 голосов
/ 28 ноября 2018
  1. Вам не нужно @RequestMapping("/processForm"), которое вы обрабатываете при входе в систему.formLogin зарегистрирует UsernamePasswordAuthenticationFilter с вашими настройками. // login page .loginPage("/my-account/sign-in") // processing url .loginProcessingUrl("/my-account/processForm") // go to this url when login success .defaultSuccessUrl("/my-account/user") .failureUrl("/my-account/error") // username & password parameter .usernameParameter("Login") .passwordParameter("Password")

  2. Убедитесь, что select l.login , ur.rolename from login l, userroles ur where l.id=ur.id and l.login = ?, ur.rolename содержит user авторизацию. .antMatchers("/my-account/basket") .hasAuthority("user")

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