Spring Security некорректно работает RememberMe

313
19 мая 2017, 14:24

Здравствуйте. Некорректно работает RememberMe.

Когда вхожу в систему с галкой RememberMe. В бп (persistent_logins) в поле username записывается пользователь целиком, а не email (

User [ id=6,
firstName=Test,
lastName=Test,
email=test@test.com, password=$2a$11$fi4bsccQ01WF3fSWvkLRluTKzG6jN85YXJ5t5.9svzoJp/Rl.l/vq, enabled=true, isUsing2FA=false, secret=897598fa-ce62-413b-8aed-2d365bcad856,
roles=[Role[name=ROLE_ADMIN][id=4]] ])

public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    DataSource dataSource;
    @Autowired
    @Qualifier("userDetailsService")
    private UserDetailsService userDetailsService;
    @Autowired
    private AuthenticationSuccessHandler myAuthenticationSuccessHandler;
    @Autowired
    private LogoutSuccessHandler myLogoutSuccessHandler;
    @Autowired
    private AuthenticationFailureHandler authenticationFailureHandler;
    @Autowired
    private CustomWebAuthenticationDetailsSource authenticationDetailsSource;
    public SecurityConfig() {
        super();
    }
    @Override
    protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
        auth.authenticationProvider(authProvider());
    }
    @Override
    public void configure(final WebSecurity web) throws Exception {
        web.ignoring()
                .antMatchers("/resources/**");
    }
    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/login*", "/logout*", "/signin/**", "/signup/**",
                        "/user/registration*", "/registrationConfirm*", "/expiredAccount*", "/registration*",
                        "/badUser*", "/user/resendRegistrationToken*", "/forgetPassword*", "/user/resetPassword*",
                        "/user/changePassword*", "/emailError*", "/resources/**", "/old/user/registration*", "/successRegister*", "/qrcode*").permitAll()
                .antMatchers("/invalidSession*").anonymous()
                .antMatchers("/user/updatePassword*", "/user/savePassword*", "/updatePassword*").hasAuthority("CHANGE_PASSWORD_PRIVILEGE")
                .anyRequest().hasAuthority("READ_PRIVILEGE")
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/homepage.html")
                .failureUrl("/login?error=true")
                .successHandler(myAuthenticationSuccessHandler)
                .failureHandler(authenticationFailureHandler)
                .authenticationDetailsSource(authenticationDetailsSource)
                .permitAll()
                .and()
                .rememberMe().rememberMeServices(rememberMeServices())
                .and()
                .sessionManagement()
                .invalidSessionUrl("/invalidSession.html")
                .maximumSessions(1).sessionRegistry(sessionRegistry()).and()
                .sessionFixation().none()
                .and()
                .logout()
                .logoutSuccessHandler(myLogoutSuccessHandler)
                .invalidateHttpSession(false)
                .logoutSuccessUrl("/logout.html?logSucc=true")
                .deleteCookies("JSESSIONID")
                .permitAll();
    }
    @Bean(name="rememberMeServices")
    public PersistentTokenBasedRememberMeServices rememberMeServices(){
        PersistentTokenBasedRememberMeServices rememberMeServices = new PersistentTokenBasedRememberMeServices("email",userDetailsService,persistentTokenRepository());
        rememberMeServices.setCookieName("remember-me");
        rememberMeServices.setParameter("remember-me");
        rememberMeServices.setTokenLength(32);
        rememberMeServices.setTokenValiditySeconds(86400);
        return rememberMeServices;
    }
    @Bean(name = "tokenRepository")
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepositoryImpl = new JdbcTokenRepositoryImpl();
        tokenRepositoryImpl.setDataSource(dataSource);
        return tokenRepositoryImpl;
    }
    @Bean
    public DaoAuthenticationProvider authProvider() {
        final CustomAuthenticationProvider authProvider = new CustomAuthenticationProvider();
        authProvider.setUserDetailsService(userDetailsService);
        authProvider.setPasswordEncoder(encoder());
        return authProvider;
    }
    @Bean
    public PasswordEncoder encoder() {
        return new BCryptPasswordEncoder(11);
    }
    @Bean
    public SessionRegistry sessionRegistry() {
        return new SessionRegistryImpl();
    }
}
READ ALSO
Как NavigationView добавить <item> программно?

Как NavigationView добавить <item> программно?

По задумке пользователь жмет "Add account" делает некие манипуляции и после его аккаунт должен будет появиться ниже уже добавленного, как реализовать...

272
TomCat error 404 и тд

TomCat error 404 и тд

Вопрос, каким образом можно реализовать аналогhtaccess ,чтобы при ошибке 404 сервер редиректил на другую страницу, а не отображалось окно с ошибкой

212
Как открыть фрагмент из адаптера RecyclerView?

Как открыть фрагмент из адаптера RecyclerView?

У меня есть адаптер, который заполняет RecyclerViewПрочитав форумы понял что обработчик нажатий необходимо сделать тоже в адаптере

416
Добавление записей в JList из метода другого класса

Добавление записей в JList из метода другого класса

Добрый день! Помогите разобратьсяЕсть два класса: Tree и List

205