CustomizeAuthenticationSuccessHandler.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package com.welampiot.security;
  2. import com.alibaba.fastjson.JSON;
  3. import com.welampiot.common.BaseResult;
  4. import com.welampiot.dto.MenuDTO;
  5. import com.welampiot.dto.UserDTO;
  6. import com.welampiot.service.UserService;
  7. import com.welampiot.vo.MenuVO;
  8. import org.springframework.beans.BeanUtils;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.security.core.Authentication;
  11. import org.springframework.security.core.context.SecurityContextHolder;
  12. import org.springframework.security.core.userdetails.User;
  13. import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
  14. import org.springframework.stereotype.Component;
  15. import javax.servlet.ServletException;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.io.IOException;
  19. import java.util.ArrayList;
  20. import java.util.Arrays;
  21. import java.util.List;
  22. @Component
  23. public class CustomizeAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
  24. @Autowired
  25. private UserService userService;
  26. @Override
  27. public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication)
  28. throws IOException, ServletException {
  29. User userDetails = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
  30. UserDTO userDTO = userService.getUserByUserName(userDetails.getUsername());
  31. List<MenuDTO> menuDTOList = userService.queryMenuList(userDTO.getUsername());
  32. List<MenuVO> voList = new ArrayList<>();
  33. for(MenuDTO dto:menuDTOList){
  34. MenuVO vo = new MenuVO();
  35. BeanUtils.copyProperties(dto,vo);
  36. voList.add(vo);
  37. }
  38. //此处还可以进行一些处理,比如登录成功之后可能需要返回给前台当前用户有哪些菜单权限,
  39. //进而前台动态的控制菜单的显示等,具体根据自己的业务需求进行扩展
  40. //返回json数据
  41. BaseResult result = BaseResult.success(voList);
  42. //处理编码方式,防止中文乱码的情况
  43. httpServletResponse.setContentType("text/json;charset=utf-8");
  44. //塞到HttpServletResponse中返回给前台
  45. httpServletResponse.getWriter().write(JSON.toJSONString(result));
  46. }
  47. }