2017-02-16 8 views
0

Я пытаюсь перенаправить на более глубокую структуру папок после успешного входа в систему.Spring Boot redirect после успешного входа

Это в моем WebSecurityConfig:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
      .antMatchers("/user/**").hasRole("USER").anyRequest().permitAll() 
      .and() 
       .formLogin() 
       .loginPage("/logon") 
        .usernameParameter("personContactEmail").passwordParameter("personRegPwd") 
       .defaultSuccessUrl("/successauth", true) 
      .and() 
       .logout() 
       .logoutSuccessUrl("/") 
      .and() 
       .exceptionHandling().accessDeniedPage("/403") 
      .and() 
      .csrf(); 
} 

И это внутри successauth отображения в/Запрос:

@RequestMapping("/successauth") 
public void afterLogon(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException 
{ 
    authentication = authenticationFacade.getAuthentication(); 

    if (authentication.isAuthenticated()) { 
     RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 
     redirectStrategy.sendRedirect(httpServletRequest, httpServletResponse, "/user/home"); 
    } 
} 

Он не хочет, чтобы перенаправить в/пользователя/дома. Это отображение запрос/пользователя/дома:

@RequestMapping(value = "/user/home", method = RequestMethod.GET) 
public String userHome(HttpServletRequest request) 
{ 
    return "/user/home"; 
} 
+0

В соответствии с '.antMatchers («/user/** »). HasRole (« USER »). AnyRequest(). AllowAll()' у вас должен быть доступ к '/ user/home' как * USER *. После входа в систему какую роль вы получаете в _authentication_? –

+0

Я получаю роль USER. Это не проблема. В моем WebSecurityConfig я изменил на это: .defaultSuccessUrl ("/ user/home", true) Он по-прежнему не работает. Но когда я перехожу на .defaultSuccessUrl («/ users/home», true) и меняю RequestMapping моего контроллера на «/ users/home», а в возвращаемом значении RequestMapping «/ user/home» он переходит в правильная страница. Но при этом он обходит всю безопасность, поскольку/пользователи не являются частью WebSecurityConfig. – Quentinb

ответ

0

JUST определить это в методе configure

.defaultSuccessUrl("/user/home", true) 

для перенаправления пользователя на главную после авторизации

UPDATE:

Вы можете определить пользовательскую аутентификациюSuccessHandler http://javapointers.com/tutorial/spring-custom-authenticationsuccesshandler-example-2/

перенаправить пользователя. Также попробуйте установить csrf().disabled() в свой конфиг

+0

Спасибо, я пробовал, но получаю сообщение «White Label Error». Не уверен, что еще я делаю неправильно, также моя причина для перехода к другому контроллеру в первую очередь потому, что я хочу перенаправить пользователя на другой путь на основе ROLE. ROLE_USER -/пользователь/домашний ROLE_ADMM -/admin/home и т. Д. и т. Д. – Quentinb

+0

Ответ обновлен – StanislavL

+0

Это интересно, если я перейду на.defaultSuccessUrl ("/ users/home", true), а также изменить RequestMapping на "/ users/home", но сохранить hte return RequestMapping как "/ user/home", он работает. Но, делая это, я полностью удаляю защиту из папки пользователя. – Quentinb

0

Извините, мой плохой, я думаю!

Я определил мой список UserRoles как тип строки:

private List<String> userRoles; 

Таким образом, при доступе к нему, у меня было только строковое значение эталонного объекта, а не сам объект. Коллекция GrantedAuthority была только значениями String, и поэтому я думаю, что моя аутентификация не работала и, следовательно, не могла перенаправляться.

После изменения в список для UserRoles объекта Объект:

private List<UserRoles> userRoles; 

Все просто упал на месте и работал отлично. Спасибо всем за ответ.