注册后无法启动Spring Boot自动登录

时间:2020-10-03 00:17:54

标签: spring spring-boot spring-security

我有一个登录名和一个注册页面。我想在注册后实现自动登录的功能。我浏览了各种文档,最后想到了这个。有人可以找出这里出了什么问题吗?

网络安全配置

@Configuration
@EnableWebSecurity
public class WebSecurity extends WebSecurityConfigurerAdapter {
     @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder()
    {
        return new BCryptPasswordEncoder();
    }
    @Autowired
    public UserDetailsService userDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/register/**","/css/**","/js/**")

                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .loginPage("/login")
                .defaultSuccessUrl("/welcome",true)
                .permitAll()
                .and()
                .rememberMe()
                .rememberMeParameter("rememberme")
                .rememberMeCookieName("myLogin")
                .tokenValiditySeconds(360*60*60)
                .and()
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logout")
                .invalidateHttpSession(true)
                .clearAuthentication(true)
                .deleteCookies("myLogin");
    }
}

控制器

        @Autowired
        protected AuthenticationManager authenticationManager;

        @Autowired
        UserRepo repo;
    
        @Autowired
        BCryptPasswordEncoder bCryptPasswordEncoder;
    
        @RequestMapping("/login")
        public String loginpage()
        {
            return "index";
        }
    
        @RequestMapping("/welcome")
        public String welcomePage()
        {
            return "welcome";
        }
    
        @RequestMapping(value = "/register", method = RequestMethod.GET)
        public String register(Model model)
        {
            model.addAttribute("user", new User());
            return "register";
        }
    
        @RequestMapping(value = "/register",method = RequestMethod.POST)
            public String registerIt(@Valid @ModelAttribute("user")User user, BindingResult result, Model model, HttpServletRequest request)
            {
        
                if(result.hasErrors())
                {
                    return "register";
                }
                Roles roles1=new Roles();
                Roles roles2=new Roles();
                roles1.setRoles("ADMIN");
                roles2.setRoles("USER");
                ArrayList<Roles> roleList=new ArrayList<>();
                roleList.add(roles1);
                roleList.add(roles2);
                user.setRoles(roleList);
                user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
                repo.save(user);
    
               

 UsernamePasswordAuthenticationToken token=new UsernamePasswordAuthenticationToken(user.getUsername(),user.getPassword());
                request.getSession();
                token.setDetails(new WebAuthenticationDetails(request));
                Authentication auth=authenticationManager.authenticate(token);
                SecurityContextHolder.getContext().setAuthentication(auth);
        
                return "welcome";

            }

仍然,注册后,页面将重定向到“登录”页面本身。我无法弄清楚出了什么问题。...请帮助...

1 个答案:

答案 0 :(得分:0)

尝试使用此方法初始化Auth:

参考:func

org.springframework.security.web.authentication.AuthenticationFilter#successfulAuthentication