2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > html用户自动登录代码 注册成功后自动登录

html用户自动登录代码 注册成功后自动登录

时间:2020-11-14 04:46:17

相关推荐

html用户自动登录代码 注册成功后自动登录

这是上述问题的答案

在控制器中:

@RequestMapping(value = "/registerHere", method = RequestMethod.POST)

public ModelAndView registerUser(@ModelAttribute("user") Users user, BindingResult result,

HttpServletRequest request, HttpServletResponse response) {

System.out.println("register 3");

ModelAndView mv = new ModelAndView("/home");

mv.addObject("homePagee", "true");

String uname = user.getUsername();

if (userDAO.getUserByName(uname) == null) {

String passwordFromForm = user.getPassword();

userDAO.saveOrUpdate(user);

try {

authenticateUserAndSetSession(user, passwordFromForm, request);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("register 4");

log.debug("Ending of the method registerUser");

return mv;

}

控制器中的上述方法进一步定义为:

`private void authenticateUserAndSetSession(Users user, String passwor`dFromForm, HttpServletRequest request){

String username = user.getUsername();

System.out.println("username: " + username + " password: " + passwordFromForm);

UserDetails userDetails = userDetailsService.loadUserByUsername(user.getUsername());

UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(username, passwordFromForm, userDetails.getAuthorities());

request.getSession();

System.out.println("Line Authentication 1");

usernamePasswordAuthenticationToken.setDetails(new WebAuthenticationDetails(request));

System.out.println("Line Authentication 2");

Authentication authenticatedUser = authenticationManager.authenticate(usernamePasswordAuthenticationToken);

System.out.println("Line Authentication 3");

if (usernamePasswordAuthenticationToken.isAuthenticated()) {

SecurityContextHolder.getContext().setAuthentication(authenticatedUser);

System.out.println("Line Authentication 4");

}

request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, SecurityContextHolder.getContext());// creates context for that session.

System.out.println("Line Authentication 5");

session.setAttribute("username", user.getUsername());

System.out.println("Line Authentication 6");

session.setAttribute("authorities", usernamePasswordAuthenticationToken.getAuthorities());

System.out.println("username: " + user.getUsername() + "password: " + user.getPassword()+"authorities: "+ usernamePasswordAuthenticationToken.getAuthorities());

user = userDAO.validate(user.getUsername(), user.getPassword());

log.debug("You are successfully register");

}

其他答案并没有建议把它放在try / catch中,所以没有意识到为什么逻辑在代码运行时没有工作......并且控制台上没有任何错误或异常。所以,如果你不把它放在尝试捕捉你不会得到不良凭据的例外。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。