提交 8327ad33 authored 作者: lvbencai's avatar lvbencai

合并分支 'qa' 到 'master'

增加分享链接权限校验 查看合并请求 !5
package com.link.report.config;
import com.link.report.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
// 注入Spring管理的拦截器实例(而非new MyInterceptor())
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/report/jmreport/shareView/**","/jmreport/shareView/**") // 拦截所有路径
.excludePathPatterns( // 排除以下路径
"/login", // 登录页
"/doLogin", // 登录提交接口
"/static/**", // 静态资源
"/error" // 错误页
).order(1);
}
}
package com.link.report.interceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.Enumeration;
@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {
// 域名信息
@Value("${jeecg.jmreport.domainUrl}")
private String domainUrl;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1. 检查用户是否已登录从header中获取token X-token
String token = request.getHeader("token");
if (token == null) {
String xtoken = request.getHeader("X-token");
if (xtoken != null) {
token = xtoken;
}
}
String requestURI = request.getRequestURI();
Enumeration<String> parameterNames = request.getParameterNames();
if (parameterNames.hasMoreElements()) {
requestURI = requestURI + "?";
while (parameterNames.hasMoreElements()) {
String parameterName = parameterNames.nextElement();
String parameterValue = request.getParameter(parameterName);
log.info("parameterName = " + parameterName);
log.info("parameterValue = " + parameterValue);
requestURI = requestURI+parameterName+"="+parameterValue+"&";
}
}
log.info("requestURI = " + requestURI);
// 2. 如果未登录,则重定向到登录页
if (token == null) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("Admin-Token")) {
token = cookie.getValue();
// TODO 加上鉴权和权限认证
// 已登录,继续执行
return true;
}
}
}
// 未登录,重定向到登录页面
log.info("未登录,重定向到登录页面");
if(domainUrl == null ){
domainUrl = getCurrentUrl(request);
}
String encodedUrl = URLEncoder.encode(requestURI, "UTF-8");
response.sendRedirect(domainUrl + "/#/login?redirect=" + encodedUrl); // 重定向到登录页面
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 可选的后续处理
log.info("postHandle 方法被调用");
log.info("modelAndView = " + modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 可选的最终处理
log.info("afterCompletion 方法被调用");
}
// 工具方法:获取当前请求的完整URL(包含参数)
private String getCurrentUrl(HttpServletRequest request) {
StringBuffer url = request.getRequestURL(); // 如:http://example.com/user/profile
String queryString = request.getQueryString(); // 如:id=1&name=test
if (queryString != null) {
url.append("?").append(queryString); // 拼接参数:http://example.com/user/profile?id=1&name=test
}
return url.toString();
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论