merge
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
package com.xwbing.demo;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 项目名称: boot-module-demo
|
||||
* 创建时间: 2018/1/23 14:45
|
||||
@@ -8,6 +14,8 @@ package com.xwbing.demo;
|
||||
*/
|
||||
public class Ademo {
|
||||
public static void main(String[] args) {
|
||||
List<String> list=new ArrayList<>();
|
||||
List<String> collect = list.stream().filter(s -> StringUtils.isNotEmpty(s)).collect(Collectors.toList());
|
||||
String[] s={"a","b"};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.alibaba.fastjson.support.config.FastJsonConfig;
|
||||
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
|
||||
import com.xwbing.handler.LoginInterceptor;
|
||||
import com.xwbing.handler.UrlPermissionsInterceptor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.Ordered;
|
||||
@@ -28,14 +29,23 @@ public class DispatcherServletConfig extends WebMvcConfigurerAdapter {
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
//拦截器1:登录判断
|
||||
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
|
||||
// registry.addInterceptor(new LoginInterceptor())
|
||||
// .addPathPatterns("/**").excludePathPatterns("/user/login", "/servlet/captchaCode", "/swagger-ui.html");
|
||||
//拦截器2...
|
||||
//登录拦截器
|
||||
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login");
|
||||
//权限拦截器
|
||||
registry.addInterceptor(urlPermissionsInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login");
|
||||
super.addInterceptors(registry);
|
||||
}
|
||||
|
||||
/**
|
||||
* 权限拦截器
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Bean
|
||||
public UrlPermissionsInterceptor urlPermissionsInterceptor() {
|
||||
return new UrlPermissionsInterceptor();
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置静态访问资源
|
||||
* 访问时不需要前缀
|
||||
@@ -68,7 +78,6 @@ public class DispatcherServletConfig extends WebMvcConfigurerAdapter {
|
||||
@Override
|
||||
public void addViewControllers(ViewControllerRegistry registry) {
|
||||
//路由配置
|
||||
registry.addViewController("/").setViewName("login.html");
|
||||
registry.addViewController("druid").setViewName("druid/index.html");
|
||||
//重定向
|
||||
registry.addRedirectViewController("doc", "swagger-ui.html");
|
||||
|
||||
@@ -29,8 +29,6 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
|
||||
private static final Set<String> SET = new HashSet<>();//拦截器白名单
|
||||
|
||||
static {
|
||||
//映射到登录页面,不拦截
|
||||
SET.add("/");
|
||||
//映射swagger文档
|
||||
SET.add("/doc");
|
||||
//验证码
|
||||
@@ -47,7 +45,7 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
String servletPath = request.getServletPath();
|
||||
if (!SET.contains(servletPath) && !servletPath.contains("login") && !servletPath.contains("test")) {
|
||||
if (!SET.contains(servletPath) && !servletPath.contains("test")) {
|
||||
HttpSession session = request.getSession(false);
|
||||
String token = request.getHeader("token");
|
||||
if (session == null) {
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
package com.xwbing.handler;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.xwbing.configuration.DispatcherServletConfig;
|
||||
import com.xwbing.constant.CommonConstant;
|
||||
import com.xwbing.constant.CommonEnum;
|
||||
import com.xwbing.domain.entity.sys.SysAuthority;
|
||||
import com.xwbing.domain.entity.sys.SysUser;
|
||||
import com.xwbing.service.sys.SysAuthorityService;
|
||||
import com.xwbing.service.sys.SysUserService;
|
||||
import com.xwbing.util.CommonDataUtil;
|
||||
import com.xwbing.util.RestMessage;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class UrlPermissionsInterceptor extends HandlerInterceptorAdapter {
|
||||
@Resource
|
||||
private SysAuthorityService sysAuthorityService;
|
||||
@Resource
|
||||
private SysUserService sysUserService;
|
||||
private final Logger logger = LoggerFactory.getLogger(DispatcherServletConfig.class);
|
||||
private static final Set<String> SET = new HashSet<>();//拦截器白名单
|
||||
|
||||
static {
|
||||
//映射swagger文档
|
||||
SET.add("doc");
|
||||
//验证码
|
||||
SET.add("captcha");
|
||||
//swagger
|
||||
SET.add("v2/api-docs");
|
||||
SET.add("swagger-resources");
|
||||
SET.add("configuration/ui");
|
||||
SET.add("configuration/security");
|
||||
//德鲁伊监控
|
||||
SET.add("druid");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
String servletPath = request.getServletPath().substring(1);
|
||||
if (!SET.contains(servletPath) && !servletPath.contains("test")) {
|
||||
if (checkUrlExit(servletPath)) {
|
||||
List<String> permissionList = permissionList(request);
|
||||
if (CollectionUtils.isNotEmpty(permissionList) && permissionList.contains(servletPath)) {
|
||||
return true;
|
||||
} else {
|
||||
try {
|
||||
logger.error("没有权限");
|
||||
OutputStream outputStream = response.getOutputStream();
|
||||
RestMessage restMessage = new RestMessage();
|
||||
restMessage.setMessage("没有权限");
|
||||
outputStream.write(JSON.toJSONString(restMessage).getBytes("utf-8"));
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户权限列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private List<String> permissionList(HttpServletRequest request) {
|
||||
String token = request.getHeader("token");
|
||||
String userName = (String) CommonDataUtil.getData(token);
|
||||
SysUser user = sysUserService.getByUserName(userName);
|
||||
List<SysAuthority> sysAuthorities;
|
||||
if (CommonConstant.IS_ENABLE.equalsIgnoreCase(user.getAdmin())) {
|
||||
sysAuthorities = sysAuthorityService.listByEnable(CommonEnum.YesOrNoEnum.YES.getCode());
|
||||
} else {
|
||||
sysAuthorities = sysUserService.listAuthorityByIdAndEnable(user.getId(), "Y");
|
||||
}
|
||||
return sysAuthorities.stream().map(SysAuthority::getUrl).filter(StringUtils::isNotEmpty).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果是返回true,表示需要认证。如果是返回false表示权限列表里没有,可以不需要认证
|
||||
*
|
||||
* @param perms
|
||||
* @return
|
||||
*/
|
||||
private boolean checkUrlExit(String perms) {
|
||||
boolean exitTag = false;
|
||||
List<SysAuthority> list = sysAuthorityService.listByEnable("");
|
||||
if (CollectionUtils.isNotEmpty(list)) {
|
||||
for (SysAuthority sysAuthority : list) {
|
||||
String validateUrl = sysAuthority.getUrl();
|
||||
if (StringUtils.isEmpty(validateUrl)) {
|
||||
continue;
|
||||
}
|
||||
if (validateUrl.equalsIgnoreCase(perms)) {
|
||||
exitTag = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return exitTag;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user