package com.ltkj.web.jmreport; import com.ltkj.common.core.domain.model.LoginUser; import com.ltkj.common.utils.StringUtils; import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import com.ltkj.framework.web.service.TokenService; import org.springframework.stereotype.Component; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * 自定义积木报表鉴权(如果不进行自定义,则所有请求不做权限控制) */ @Component public class JimuReportTokenService implements JmReportTokenServiceI { @Autowired private TokenService tokenService; @Override public String getToken(HttpServletRequest request) { //先从url参数中取,若没有,再从header中取 String paramToken = request.getParameter("token"); String headerToken = request.getHeader("token"); if (StringUtils.isEmpty(paramToken)) { paramToken = headerToken; } LoginUser loginUser = tokenService.getLoginUser(paramToken); if (loginUser != null) { return paramToken; } return ""; } @Override public String getUsername(String token) { LoginUser loginUser = tokenService.getLoginUser(token); return loginUser.getUsername(); } /** * 校验设计器权限 * @param token * @return */ @Override public Boolean verifyToken(String token) { LoginUser loginUser = tokenService.getLoginUser(token); if (StringUtils.isNotNull(loginUser)) { //刷新Token有效期 tokenService.refreshToken(loginUser); //超管不需要鉴权 if(loginUser.getUser() != null && loginUser.getUser().isAdmin()){ return true; }else{ //校验菜单权限 Set permissions = loginUser.getPermissions(); if(permissions != null && permissions.contains("report:jmreport:list")){ return true; } } } return false; } /** * 系统上下文变量(http://report.jeecg.com/2159712) * @param token * @return */ @Override public Map getUserInfo(String token) { Map map = new HashMap(5); LoginUser loginUser = tokenService.getLoginUser(token); //设置用户名 map.put(SYS_USER_CODE, loginUser.getUsername()); //设置部门编码 map.put(SYS_ORG_CODE, loginUser.getDeptId()); // 将所有信息存放至map 解析sql/api会根据map的键值解析 return map; } @Override public HttpHeaders customApiHeader() { HttpHeaders header = new HttpHeaders(); //主要用于API数据源。默认给API数据源的header中携带上Token。 //如使用当前项目的API,则需要在header中携带Authorization头 header.add(tokenService.getHeader(), getToken()); header.add("token", getToken()); header.add("X-Access-Token", getToken()); return header; } }