mirror of
https://github.com/luoye663/e5.git
synced 2024-12-26 11:48:50 +00:00
增加角色权限
This commit is contained in:
parent
fe77f2d7f2
commit
544415cac1
@ -36,32 +36,28 @@ public class WebExceptionAspect {
|
|||||||
/**
|
/**
|
||||||
* 拦截web层异常,记录异常日志,并返回友好信息到前端
|
* 拦截web层异常,记录异常日志,并返回友好信息到前端
|
||||||
*
|
*
|
||||||
* @param e
|
* @param e 异常对象
|
||||||
* 异常对象
|
|
||||||
*/
|
*/
|
||||||
@AfterThrowing(pointcut = "bountyHunterPointcut()", throwing = "e")
|
@AfterThrowing(pointcut = "bountyHunterPointcut()", throwing = "e")
|
||||||
public void handleThrowing(JoinPoint joinPoint, Exception e) {
|
public void handleThrowing(JoinPoint joinPoint, Exception e) {
|
||||||
//e.printStackTrace();
|
long time = System.currentTimeMillis();
|
||||||
/*if (null != user){
|
logger.error("发现异常!方法:{} --->异常 {}, 异常ID: {}", joinPoint.getSignature().getName(), e, time);
|
||||||
log.error("发现异常!操作用户手机号:"+user.getMobile());
|
|
||||||
}*/
|
|
||||||
logger.error("发现异常!方法:"+ joinPoint.getSignature().getName()+"--->异常",e);
|
|
||||||
//这里输入友好性信息
|
//这里输入友好性信息
|
||||||
if (!StringUtils.isEmpty(e.getMessage())){
|
// writeContent(500, "十分抱歉,出现异常!程序猿小哥正在紧急抢修...", time);
|
||||||
logger.error("异常",e.getMessage());
|
if (!StringUtils.isEmpty(e.getMessage())) {
|
||||||
writeContent(500,e.getMessage());
|
logger.error("异常", e.getMessage());
|
||||||
}else {
|
writeContent(500, e.getMessage(),time);
|
||||||
writeContent(500,"十分抱歉,出现异常!程序猿小哥正在紧急抢修...");
|
} else {
|
||||||
|
writeContent(500, "十分抱歉,出现异常!程序猿小哥正在紧急抢修...", time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将内容输出到浏览器
|
* 将内容输出到浏览器
|
||||||
*
|
*
|
||||||
* @param content
|
* @param content 输出内容
|
||||||
* 输出内容
|
|
||||||
*/
|
*/
|
||||||
public static void writeContent(Integer code,String content) {
|
public static void writeContent(Integer code, String content, long time) {
|
||||||
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
|
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
|
||||||
.getResponse();
|
.getResponse();
|
||||||
response.setCharacterEncoding("UTF-8");
|
response.setCharacterEncoding("UTF-8");
|
||||||
@ -72,10 +68,10 @@ public class WebExceptionAspect {
|
|||||||
try {
|
try {
|
||||||
writer = response.getWriter();
|
writer = response.getWriter();
|
||||||
jsonGenerator = (new ObjectMapper()).getFactory().createGenerator(writer);
|
jsonGenerator = (new ObjectMapper()).getFactory().createGenerator(writer);
|
||||||
jsonGenerator.writeObject(ResultUtil.error(code,content));
|
jsonGenerator.writeObject(ResultUtil.error(code, time, content));
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
e1.printStackTrace();
|
e1.printStackTrace();
|
||||||
}finally {
|
} finally {
|
||||||
writer.flush();
|
writer.flush();
|
||||||
writer.close();
|
writer.close();
|
||||||
}
|
}
|
||||||
|
@ -1,65 +0,0 @@
|
|||||||
package io.qyi.e5.config.security;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.security.access.AccessDecisionManager;
|
|
||||||
import org.springframework.security.access.AccessDeniedException;
|
|
||||||
import org.springframework.security.access.ConfigAttribute;
|
|
||||||
import org.springframework.security.authentication.InsufficientAuthenticationException;
|
|
||||||
import org.springframework.security.core.Authentication;
|
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 决策管理器
|
|
||||||
*
|
|
||||||
* @program: e5
|
|
||||||
* @description:
|
|
||||||
* @author: 落叶随风
|
|
||||||
* @create: 2020-06-15 16:11
|
|
||||||
**/
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
public class MyAccessDecisionManager implements AccessDecisionManager {
|
|
||||||
@Override
|
|
||||||
public void decide(Authentication authentication, Object o, Collection<ConfigAttribute> collection) throws AccessDeniedException, InsufficientAuthenticationException {
|
|
||||||
if (collection == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
System.out.println(o.toString()); // object is a URL.
|
|
||||||
log.info("object is a URL. {}", o.toString());
|
|
||||||
//所请求的资源拥有的权限(一个资源对多个权限)
|
|
||||||
Iterator<ConfigAttribute> iterator = collection.iterator();
|
|
||||||
while (iterator.hasNext()) {
|
|
||||||
ConfigAttribute configAttribute = iterator.next();
|
|
||||||
//访问所请求资源所需要的权限
|
|
||||||
String needPermission = configAttribute.getAttribute();
|
|
||||||
log.info("访问 " + o.toString() + " 需要的权限是:" + needPermission);
|
|
||||||
if (needPermission == null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//用户所拥有的权限authentication
|
|
||||||
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
|
||||||
for (GrantedAuthority ga : authorities) {
|
|
||||||
if (needPermission.equals(ga.getAuthority())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//没有权限
|
|
||||||
throw new AccessDeniedException(" 无权限! ");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean supports(ConfigAttribute configAttribute) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean supports(Class<?> aClass) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,68 +0,0 @@
|
|||||||
package io.qyi.e5.config.security;
|
|
||||||
|
|
||||||
import org.springframework.security.access.ConfigAttribute;
|
|
||||||
import org.springframework.security.access.SecurityConfig;
|
|
||||||
import org.springframework.security.web.FilterInvocation;
|
|
||||||
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
|
|
||||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @program: e5
|
|
||||||
* @description:
|
|
||||||
* @author: 落叶随风
|
|
||||||
* @create: 2020-06-17 16:25
|
|
||||||
**/
|
|
||||||
@Service
|
|
||||||
public class MyInvocationSecurityMetadataSourceService implements FilterInvocationSecurityMetadataSource {
|
|
||||||
|
|
||||||
private HashMap<String, Collection<ConfigAttribute>> map =null;
|
|
||||||
/**
|
|
||||||
* 加载权限表中所有权限
|
|
||||||
*/
|
|
||||||
public void loadResourceDefine(){
|
|
||||||
map = new HashMap<>();
|
|
||||||
Collection<ConfigAttribute> array;
|
|
||||||
ConfigAttribute cfg;
|
|
||||||
List<Map<String, String>> permissions = new LinkedList<>();
|
|
||||||
for(Map<String, String> permission : permissions) {
|
|
||||||
array = new ArrayList<>();
|
|
||||||
cfg = new SecurityConfig("ADMIN");
|
|
||||||
//此处只添加了用户的名字,其实还可以添加更多权限的信息,例如请求方法到ConfigAttribute的集合中去。此处添加的信息将会作为MyAccessDecisionManager类的decide的第三个参数。
|
|
||||||
array.add(cfg);
|
|
||||||
//用权限的getUrl() 作为map的key,用ConfigAttribute的集合作为 value,
|
|
||||||
map.put("/admin/test", array);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<ConfigAttribute> getAttributes(Object o) throws IllegalArgumentException {
|
|
||||||
if(map ==null) loadResourceDefine();
|
|
||||||
//object 中包含用户请求的request 信息
|
|
||||||
HttpServletRequest request = ((FilterInvocation) o).getHttpRequest();
|
|
||||||
AntPathRequestMatcher matcher;
|
|
||||||
String resUrl;
|
|
||||||
for(Iterator<String> iter = map.keySet().iterator(); iter.hasNext(); ) {
|
|
||||||
resUrl = iter.next();
|
|
||||||
matcher = new AntPathRequestMatcher(resUrl);
|
|
||||||
if(matcher.matches(request)) {
|
|
||||||
return map.get(resUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<ConfigAttribute> getAllConfigAttributes() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean supports(Class<?> aClass) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -58,12 +58,11 @@ public class UsernamePasswordAuthenticationToken extends AbstractAuthenticationT
|
|||||||
|
|
||||||
|
|
||||||
// 创建已认证的用户密码认证对象
|
// 创建已认证的用户密码认证对象
|
||||||
public UsernamePasswordAuthenticationToken(String name, String avatar_url, int github_id,String Authority, Collection<? extends GrantedAuthority> authorities) {
|
public UsernamePasswordAuthenticationToken(String name, String avatar_url, int github_id, Collection<? extends GrantedAuthority> authorities) {
|
||||||
super(authorities);
|
super(authorities);
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.avatar_url = avatar_url;
|
this.avatar_url = avatar_url;
|
||||||
this.github_id = github_id;
|
this.github_id = github_id;
|
||||||
this.Authority = Authority;
|
|
||||||
super.setAuthenticated(true);
|
super.setAuthenticated(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ import java.util.UUID;
|
|||||||
**/
|
**/
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/admin")
|
@RequestMapping("/admin")
|
||||||
public class TestController {
|
public class AdminController {
|
||||||
@Autowired
|
@Autowired
|
||||||
RabbitTemplate rabbitTemplate;
|
RabbitTemplate rabbitTemplate;
|
||||||
|
|
||||||
@ -45,6 +45,7 @@ public class TestController {
|
|||||||
public void send() {
|
public void send() {
|
||||||
Task.sendTaskOutlookMQ(19658189);
|
Task.sendTaskOutlookMQ(19658189);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/sendAll")
|
@GetMapping("/sendAll")
|
||||||
public String sendAll() {
|
public String sendAll() {
|
||||||
Task.sendTaskOutlookMQALL();
|
Task.sendTaskOutlookMQALL();
|
@ -9,7 +9,6 @@ package io.qyi.e5.service.task;
|
|||||||
public interface ITask {
|
public interface ITask {
|
||||||
void sendTaskOutlookMQ(int github_id);
|
void sendTaskOutlookMQ(int github_id);
|
||||||
void sendTaskOutlookMQALL();
|
void sendTaskOutlookMQALL();
|
||||||
|
boolean executeE5(int github_id);
|
||||||
void executeE5(int github_id);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -72,13 +72,13 @@ public class TaskImpl implements ITask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void executeE5(int github_id) {
|
public boolean executeE5(int github_id) {
|
||||||
Outlook Outlook = outlookService.getOne(new QueryWrapper<Outlook>().eq("github_id", github_id));
|
Outlook Outlook = outlookService.getOne(new QueryWrapper<Outlook>().eq("github_id", github_id));
|
||||||
if (Outlook == null) {
|
if (Outlook == null) {
|
||||||
logger.warn("未找到此用户,github_id: {}", github_id);
|
logger.warn("未找到此用户,github_id: {}", github_id);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
outlookService.getMailList(Outlook);
|
return outlookService.getMailList(Outlook);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,6 +31,13 @@ public class ResultUtil extends Throwable {
|
|||||||
result.setMsg(msg);
|
result.setMsg(msg);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
public static Result error(Integer code, long time, String msg) {
|
||||||
|
Result result = new Result();
|
||||||
|
result.setCode(code);
|
||||||
|
result.setMsg(msg);
|
||||||
|
result.setData(time);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
public static Result success(ResultEnum resultEnum, Object object) {
|
public static Result success(ResultEnum resultEnum, Object object) {
|
||||||
Result result = new Result();
|
Result result = new Result();
|
||||||
result.setCode(resultEnum.getCode());
|
result.setCode(resultEnum.getCode());
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
package io.qyi.e5;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
|
|
||||||
@SpringBootTest
|
|
||||||
class E5ApplicationTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void contextLoads() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
package io.qyi.e5.string;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
|
||||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @program: e5
|
|
||||||
* @description:
|
|
||||||
* @author: 落叶随风
|
|
||||||
* @create: 2020-04-20 00:38
|
|
||||||
**/
|
|
||||||
public class MyThread implements Runnable {
|
|
||||||
private Random random = null;
|
|
||||||
|
|
||||||
public MyThread() {
|
|
||||||
random = new Random();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
System.out.println("任务执行开始:" + new Date());
|
|
||||||
/**使用随机延时[0-3]秒来模拟执行任务*/
|
|
||||||
int sleepNumber = random.nextInt(3);
|
|
||||||
TimeUnit.SECONDS.sleep(2);
|
|
||||||
System.out.println("任务执行完毕:" + new Date());
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
ScheduledThreadPoolExecutor service = new ScheduledThreadPoolExecutor(2);
|
|
||||||
System.out.println("开始任务");
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
|
||||||
//延时3秒执行
|
|
||||||
service.schedule(new MyThread(), 3, TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
System.out.println("结束任务");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,66 +0,0 @@
|
|||||||
package io.qyi.e5.string;
|
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.JsonArray;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.google.gson.JsonObject;
|
|
||||||
import lombok.SneakyThrows;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @program: e5
|
|
||||||
* @description:
|
|
||||||
* @author: 落叶随风
|
|
||||||
* @create: 2020-03-05 17:09
|
|
||||||
**/
|
|
||||||
public class dome01 {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test01() {
|
|
||||||
String[] s = new String[]{"CompactToken validation", "Access token has expired.", "Access token validation failure"};
|
|
||||||
String msg = "Access token has expired.";
|
|
||||||
|
|
||||||
System.out.println(s[1]);
|
|
||||||
System.out.println(msg.indexOf(s[1]));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
JsonObject jsonObject = new Gson().fromJson("", JsonObject.class);
|
|
||||||
JsonArray data = jsonObject.getAsJsonArray("data");
|
|
||||||
for (JsonElement j : data) {
|
|
||||||
int pid = j.getAsJsonObject().get("pid").getAsInt();
|
|
||||||
}
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
|
||||||
JsonObject JsonObject = data.get(i).getAsJsonObject();
|
|
||||||
JsonObject.get("pid").getAsInt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void r(){
|
|
||||||
for (int i = 0; i < 30; i++) {
|
|
||||||
System.out.println(getRandom(3600,7200));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void ScheduledExecutor(){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public String getRandom(int start, int end){
|
|
||||||
Random r = new Random();
|
|
||||||
String Expiration = String.valueOf((r.nextInt(end-start +1) + start) );
|
|
||||||
return Expiration;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user