package com.welampiot.security; import com.alibaba.fastjson.JSON; import com.welampiot.common.BaseResult; import com.welampiot.dto.MenuDTO; import com.welampiot.dto.UserDTO; import com.welampiot.service.UserService; import com.welampiot.vo.MenuVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @Component public class CustomizeAuthenticationSuccessHandler implements AuthenticationSuccessHandler { @Autowired private UserService userService; @Override public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException { User userDetails = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); UserDTO userDTO = userService.getUserByUserName(userDetails.getUsername()); List menuDTOList = userService.queryMenuList(userDTO.getUsername()); List voList = new ArrayList<>(); for(MenuDTO dto:menuDTOList){ MenuVO vo = new MenuVO(); BeanUtils.copyProperties(dto,vo); voList.add(vo); } //此处还可以进行一些处理,比如登录成功之后可能需要返回给前台当前用户有哪些菜单权限, //进而前台动态的控制菜单的显示等,具体根据自己的业务需求进行扩展 //返回json数据 BaseResult result = BaseResult.success(voList); //处理编码方式,防止中文乱码的情况 httpServletResponse.setContentType("text/json;charset=utf-8"); //塞到HttpServletResponse中返回给前台 httpServletResponse.getWriter().write(JSON.toJSONString(result)); } }