diff --git a/.gitignore b/.gitignore
index 549e00a2a96fa9d7c5dbc9859664a78d980158c2..cbf1b4e0c09953dfead8f37ce9dfe9721a8af4e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,3 +31,4 @@ build/
### VS Code ###
.vscode/
+/out/
diff --git a/pom.xml b/pom.xml
index 05555ad83efa4fd9f349b2f50e7e09d4840c5563..5392d0fccabaa17e6be4f70049756f1e8241c9fa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,8 +9,8 @@
com.cetc32
- dh
- 0.0.1-SNAPSHOT
+ dh-authCenter
+ 1.0
jar
dhManage
Demo project for Spring Boot
@@ -20,7 +20,6 @@
UTF-8
UTF-8
1.3.1
-
@@ -28,6 +27,11 @@
org.springframework.boot
spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-thymeleaf
+
@@ -72,11 +85,7 @@
42.2.18
-
- com.cetc32
- web-util
- 1.0
-
+
tk.mybatis
@@ -101,11 +110,11 @@
mybatis-generator-core
1.3.7
-->
-
+
com.github.pagehelper
@@ -283,41 +292,8 @@
-->
-
-
-
- dev
-
- dev
-
-
-
-
- true
-
-
-
-
-
-
-
- src/main/resources
- false
-
- application-*.yml
-
-
-
- src/main/resources
- true
-
- application-{profiles.active}.yml
-
-
-
-
org.springframework.boot
diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..561be43d4e33b5a6259c7b7b2521643b7c471dc3
--- /dev/null
+++ b/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: com.cetc32.dh.DhApplication
+
diff --git a/src/main/java/com/cetc32/dh/DhApplication.java b/src/main/java/com/cetc32/dh/DhApplication.java
index c30e26d8afd964104651226216892eae229070d9..4d71944b14b1d8416923d0fd2bfee67596ceb5dd 100644
--- a/src/main/java/com/cetc32/dh/DhApplication.java
+++ b/src/main/java/com/cetc32/dh/DhApplication.java
@@ -18,7 +18,7 @@ import tk.mybatis.spring.annotation.MapperScan;
* @version: 1.0
* @date: 2020/10/13 11:19
*/
-@SpringBootApplication
+@SpringBootApplication(scanBasePackages = {"com.cetc32.dh","com.cetc32.webutil.client"})
@MapperScan(basePackages = "com.cetc32.dh.mybatis")
public class DhApplication {
diff --git a/src/main/java/com/cetc32/dh/beans/DataCollected.java b/src/main/java/com/cetc32/dh/beans/DataCollected.java
deleted file mode 100644
index 5c0d68766e8a80505a57c16745fb5b17c96844eb..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/beans/DataCollected.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.cetc32.dh.beans;
-
-import java.util.Date;
-
-public class DataCollected {
- private Integer userid;
- private String eventtype;
- private String points;
- private String cityname;
- private Date uploadtime;
- private String describe;
- private byte[] photo;
- private String submitor;
-
-
-
- public Integer getUserid() {
- return userid;
- }
-
- public void setUserid(Integer userid) {
- this.userid = userid;
- }
-
- public String getEventtype() {
- return eventtype;
- }
-
- public void setEventtype(String eventtype) {
- if(eventtype!=null)
- {
- eventtype=eventtype.toLowerCase();
- }
- this.eventtype = eventtype;
- }
-
- public String getPoints() {
- return points;
- }
-
- public void setPoints(String points) {
- this.points = points;
- }
-
- public String getCityname() {
- return cityname;
- }
-
- public void setCityname(String cityname) {
- this.cityname = cityname;
- }
-
- public Date getUploadtime() {
- return uploadtime;
- }
-
- public void setUploadtime(Date uploadtime) {
- this.uploadtime = uploadtime;
- }
-
- public String getDescribe() {
- return describe;
- }
-
- public void setDescribe(String describe) {
- this.describe = describe;
- }
-
- public byte[] getPhoto() {
- return photo;
- }
-
- public void setPhoto(byte[] photo) {
- this.photo = photo;
- }
-
- public String getSubmitor() {
- return submitor;
- }
-
- public void setSubmitor(String submitor) {
- this.submitor = submitor;
- }
-}
diff --git a/src/main/java/com/cetc32/dh/beans/ReqSubmit.java b/src/main/java/com/cetc32/dh/beans/ReqSubmit.java
deleted file mode 100644
index 9ff7e1a2c1fb62bce4749de6c12a315bd6ec3802..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/beans/ReqSubmit.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.cetc32.dh.beans;
-
-import org.springframework.web.multipart.MultipartFile;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-public class ReqSubmit {
- private String project;
- private String name;
- private String duedate;
- private String area;
- private String description;
- private String username;
- private Integer department;
- private MultipartFile file;
-
- public String getProject() {
- return project;
- }
-
- public void setProject(String project) {
- this.project = project;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Date getDuedate() {
- SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
- try {
- return sdf.parse(duedate);
- } catch (ParseException e) {
- return null;
-// e.printStackTrace();
- }
- }
-
- public void setDuedate(String duedate) {
- this.duedate = duedate;
- }
-
- public String getArea() {
- return area;
- }
-
- public void setArea(String area) {
- this.area = area;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public Integer getDepartment() {
- return department;
- }
-
- public void setDepartment(Integer department) {
- this.department = department;
- }
-
- public MultipartFile getFile() {
- return file;
- }
-
- public void setFile(MultipartFile file) {
- this.file = file;
- }
-
- @Override
- public String toString() {
- return "ReqSubmit{" +
- "project='" + project + '\'' +
- ", name='" + name + '\'' +
- ", duedate='" + duedate + '\'' +
- ", area='" + area + '\'' +
- ", description='" + description + '\'' +
- ", username='" + username + '\'' +
- ", department=" + department +
- ", file=" + file.getName() +
- '}';
- }
-}
diff --git a/src/main/java/com/cetc32/dh/beans/ResultDataCollected.java b/src/main/java/com/cetc32/dh/beans/ResultDataCollected.java
deleted file mode 100644
index 2c0692d9770d790da162ba7c1c22f9c454ff09ff..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/beans/ResultDataCollected.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.cetc32.dh.beans;
-
-
-import com.alibaba.fastjson.annotation.JSONField;
-
-import java.util.Date;
-
-public class ResultDataCollected {
- private Integer userid;
- private String eventtype;
- private String points;
- private String cityname;
- private Date uploadtime;
- private String describe;
- private String photopath;
-
-
-
- public String getPhotopath() {
- return photopath;
- }
-
- public void setPhotopath(String photopath) {
- this.photopath = photopath;
- }
-
-
- public Integer getUserid() {
- return userid;
- }
-
- public void setUserid(Integer userid) {
- this.userid = userid;
- }
-
- public String getEventtype() {
- return eventtype;
- }
-
- public void setEventtype(String eventtype) {
- this.eventtype = eventtype;
- }
-
- public String getPoints() {
- return points;
- }
-
- public void setPoints(String points) {
- this.points = points;
- }
-
- public String getCityname() {
- return cityname;
- }
-
- public void setCityname(String cityname) {
- this.cityname = cityname;
- }
-
- public Date getUploadtime() {
- return uploadtime;
- }
-
- public void setUploadtime(Date uploadtime) {
- this.uploadtime = uploadtime;
- }
-
- public String getDescribe() {
- return describe;
- }
-
- public void setDescribe(String describe) {
- this.describe = describe;
- }
-
-}
diff --git a/src/main/java/com/cetc32/dh/beans/ResultUserInfo.java b/src/main/java/com/cetc32/dh/beans/ResultUserInfo.java
index 0a7f47815131d66602dc6750c5aeb36e788182e7..51982457c2e917898ad16a6a8f25e2afa6220bd4 100644
--- a/src/main/java/com/cetc32/dh/beans/ResultUserInfo.java
+++ b/src/main/java/com/cetc32/dh/beans/ResultUserInfo.java
@@ -3,6 +3,7 @@ package com.cetc32.dh.beans;
import com.cetc32.dh.entity.NumberS;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -18,6 +19,7 @@ public class ResultUserInfo extends NumberS {
private Integer security;
private List department;
private List areacode;
+ private List permissions;
private Integer userStatus;
@@ -48,6 +50,11 @@ public class ResultUserInfo extends NumberS {
public List getDepartment() {
return department;
}
+
+ public void setDepartment(List department) {
+ this.department = department;
+ }
+
public void setDepartment(String department)
{
this.department=str2intList(department);
@@ -57,6 +64,9 @@ public class ResultUserInfo extends NumberS {
return areacode;
}
+ public void setAreacode(Listareacode){
+ this.areacode=areacode;
+ }
public void setAreacode(String areacode)
{
if(areacode ==null)
@@ -76,6 +86,63 @@ public class ResultUserInfo extends NumberS {
}
}
+ public void setPermissions(String[] permissions){
+ if(permissions ==null)
+ {
+ this.permissions = new ArrayList<>();
+ return;
+ }
+ if(permissions instanceof String[])
+ {
+ if(permissions.length==0)
+ {
+ return;
+ }
+ if(this.permissions==null )
+ this.permissions=new ArrayList<>();
+ this.permissions.clear();
+ this.permissions.addAll(Arrays.asList(permissions));
+ }
+ }
+ public void setPermissions(List permissions){
+ if(permissions ==null)
+ {
+ this.permissions = new ArrayList<>();
+ return;
+ }
+ if(permissions instanceof List)
+ {
+ if(permissions.isEmpty())
+ {
+ //this.permissions = new ArrayList<>();
+ return;
+ }
+ if(this.permissions==null )
+ this.permissions=new ArrayList<>();
+ this.permissions.clear();
+ this.permissions.addAll(permissions);
+ }
+ }
+ public void setPermissions(String permissions){
+ if(permissions ==null)
+ {
+ this.permissions = new ArrayList<>();
+ return;
+ }
+ if(permissions instanceof String)
+ {
+ if(permissions.isEmpty())
+ {
+ //this.permissions = new ArrayList<>();
+ return ;
+ }
+ String s=trimBothEndsChars(permissions,",");
+ this.permissions=Stream.of(s.split(",")).collect(Collectors.toList());
+ }
+ }
+ public List getPermissions() {
+ return permissions;
+ }
public String getUsername() {
return username;
diff --git a/src/main/java/com/cetc32/dh/beans/TraceUpload.java b/src/main/java/com/cetc32/dh/beans/TraceUpload.java
deleted file mode 100644
index 5578bbeffbb57c600ee2e646ffe8e4a5bacf19aa..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/beans/TraceUpload.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.cetc32.dh.beans;
-
-import java.util.Date;
-
-public class TraceUpload {
-
- private String path;
- private String title;
- private String category;
- private String starttime;
- private String endtime;
- private String size;
-
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getCategory() {
- return category;
- }
-
- public void setCategory(String category) {
- this.category = category;
- }
-
- public String getStarttime() {
- return starttime;
- }
-
- public void setStarttime(String starttime) {
- this.starttime = starttime;
- }
-
- public String getEndtime() {
- return endtime;
- }
-
- public void setEndtime(String endtime) {
- this.endtime = endtime;
- }
-
- public String getSize() {
- return size;
- }
-
- public void setSize(String size) {
- this.size = size;
- }
-
-
-}
diff --git a/src/main/java/com/cetc32/dh/beans/UserInfo.java b/src/main/java/com/cetc32/dh/beans/UserInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1acd57b427287827ef44a455035afbe1b873aa6
--- /dev/null
+++ b/src/main/java/com/cetc32/dh/beans/UserInfo.java
@@ -0,0 +1,86 @@
+package com.cetc32.dh.beans;
+
+import com.cetc32.dh.entity.NumberS;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class UserInfo extends NumberS {
+ private String username;
+ private String password;
+ private List role;
+ private Integer security;
+ private List department;
+ private List areacode;
+
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public List getRole() {
+ return role;
+ }
+
+ public void setRole(List role) {
+ this.role = role;
+ }
+ public void setSingleRole(String singleRole) {
+ if(isNumber(singleRole))
+ {
+ this.role = new ArrayList<>();
+ this.role.add(Integer.parseInt(singleRole));
+ }
+ }
+
+ public Integer getSecurity() {
+ return security;
+ }
+
+ public void setSecurity(Integer security) {
+ this.security = security;
+ }
+
+ public List getDepartment() {
+ return department;
+ }
+
+ public void setDepartment(List department) {
+ this.department = department;
+ }
+
+ public List getAreacode() {
+ return areacode;
+ }
+
+ public void setAreacode(List areacode) {
+ this.areacode = areacode;
+ }
+
+
+ private boolean isNumber(String num)
+ {
+ if(num==null || num.isEmpty())
+ {
+ return false;
+ }
+ Pattern pattern = Pattern.compile("[0-9]*");
+ return pattern.matcher(num).matches();
+ }
+
+}
diff --git a/src/main/java/com/cetc32/dh/common/filter/FormFilter.java b/src/main/java/com/cetc32/dh/common/filter/FormFilter.java
deleted file mode 100644
index 162c938c9628071467fc7a96a7c3201205a23e28..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/filter/FormFilter.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * Copyright(C): CETC-32
- * 文件描述:过滤认证格式类
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-package com.cetc32.dh.common.filter;
-
-
-import com.cetc32.dh.entity.BaseAdminUser;
-import org.apache.shiro.session.Session;
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-/**
- * @Title: FormFilter
- * @Description: 过滤认证格式类
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:2020/9/13加上 subject.isRemembered(),让它同时也兼容remember这种情况。
- */
-public class FormFilter extends FormAuthenticationFilter {
-
- /**
- * 指定缓存失效时间
- * @param request servlet请求
- * @param response servlet响应
- * @param mappedValue 之前传输数据使用的对象,现在废弃了
- * @return 返回布尔值true,说明登陆用户为已登陆的且使用记住我功能登陆的用户,反之亦然。
- * 修改信息:
- */
- @Override
- protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
- Subject subject = getSubject(request, response);
-
- // 如果 isAuthenticated 为 false 证明不是登录过的,同时 isRememberd 为true
- // 证明是没登陆直接通过记住我功能进来的
- if (!subject.isAuthenticated() && subject.isRemembered()) {
-
- // 获取session看看是不是空的
- Session session = subject.getSession(true);
-
- // 查看session属性当前是否是空的
- if (session.getAttribute("userName") == null) {
- // 如果是空的才初始化
- BaseAdminUser user = (BaseAdminUser)subject.getPrincipal();
- //存入用户数据
- session.setAttribute("userName", user.getSysUserName());
- }
- }
-
- // 这个方法本来只返回 subject.isAuthenticated() 现在我们加上 subject.isRemembered()
- // 让它同时也兼容remember这种情况
- return subject.isAuthenticated() || subject.isRemembered();
-// return true;
- }
-
-}
diff --git a/src/main/java/com/cetc32/dh/common/filter/JWTFilter.java b/src/main/java/com/cetc32/dh/common/filter/JWTFilter.java
deleted file mode 100644
index da983d8aaff581babff423adfc2743455bcdf823..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/filter/JWTFilter.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * 文件描述: Token检查类
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-package com.cetc32.dh.common.filter;
-
-import com.auth0.jwt.exceptions.TokenExpiredException;
-import com.cetc32.dh.common.utils.JWTUtil;
-import com.cetc32.dh.config.JWTToken;
-import com.cetc32.dh.config.RedisUtil;
-import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.URLEncoder;
-
-/**
- * Token检查类
- * @Title: FormFilter
- * @version: 1.0
- * @date: 2020/9/11 10:55
- */
-public class JWTFilter extends BasicHttpAuthenticationFilter {
- /**
- * 指定缓存失效时间
- * @param request servlet请求
- * @param response servlet响应
- * @param mappedValue 之前传输数据使用的对象,现在废弃了
- * @return 返回布尔值true或false,true说明toker校验通过
- * 修改信息:
- */
- //是否允许访问,如果带有 token,则对 token 进行检查,否则直接通过
- @Override
- protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
- //判断请求的请求头是否带上 "Token"
- System.out.println("isAccessAllowed");
- if (isLoginAttempt(request, response)){
- //如果存在,则进入 executeLogin 方法执行登入,检查 token 是否正确
- try {
- executeLogin(request, response);
- return true;
-
- }catch (Exception e){
- /*
- * 注意这里捕获的异常其实是在Realm抛出的,但是由于executeLogin()方法抛出的异常是从login()来的,
- * login抛出的异常类型是AuthenticationException,所以要去获取它的子类异常才能获取到我们在Realm抛出的异常类型。
- */
- System.out.println("刷新token");
- String msg=e.getMessage();
- Throwable cause = e.getCause();
- if (cause!=null&&cause instanceof TokenExpiredException){
- //AccessToken过期,尝试去刷新token
- String result=refreshToken(request, response);
- if (result.equals("success")){
- System.out.println("request.equals(\"success\")");
- return true;
- }
- msg=result;
- }
- responseError(response,msg);
- }
- }
- //如果请求头不存在 Token,则可能是执行登陆操作或者是游客状态访问,无需检查 token,直接返回 true
- return true;
- }
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- protected boolean isLoginAttempt(ServletRequest request, ServletResponse response) {
- HttpServletRequest req= (HttpServletRequest) request;
- String token=req.getHeader("Authorization");
- return token !=null;
- }
- /**
- * executeLogin实际上就是先调用createToken来获取token,这里我们重写了这个方法,就不会自动去调用createToken来获取token
- * 然后调用getSubject方法来获取当前用户再调用login方法来实现登录
- * 这也解释了我们为什么要自定义jwtToken,因为我们不再使用Shiro默认的UsernamePasswordToken了。
- * */
- @Override
- protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
- System.out.println("executeLogin");
- HttpServletRequest req= (HttpServletRequest) request;
- String token=req.getHeader("Authorization");
- JWTToken jwt=new JWTToken(token);
- //交给自定义的realm对象去登录,如果错误他会抛出异常并被捕获
- getSubject(request, response).login(jwt);
- return true;
- }
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
- System.out.println("preHandle");
- HttpServletRequest req= (HttpServletRequest) request;
- HttpServletResponse res= (HttpServletResponse) response;
- res.setHeader("Access-control-Allow-Origin",req.getHeader("Origin"));
- res.setHeader("Access-control-Allow-Methods","GET,POST,OPTIONS,PUT,DELETE");
- res.setHeader("Access-control-Allow-Headers",req.getHeader("Access-Control-Request-Headers"));
- // 跨域时会首先发送一个option请求,这里我们给option请求直接返回正常状态
- if (req.getMethod().equals(RequestMethod.OPTIONS.name())) {
- res.setStatus(HttpStatus.OK.value());
- return false;
- }
- return super.preHandle(request, response);
- }
-
- /**
- * 将非法请求跳转到 /unauthorized/**
- */
- private void responseError(ServletResponse response, String message) {
- System.out.println("responseError");
-
- try {
- HttpServletResponse httpServletResponse = (HttpServletResponse) response;
- //设置编码,否则中文字符在重定向时会变为空字符串
- message = URLEncoder.encode(message, "UTF-8");
- httpServletResponse.sendRedirect("/unauthorized/" + message);
- } catch (IOException e) {
- System.out.println(e.getMessage());
- }
- }
-
-
- /**
- * 这里的getBean是因为使用@Autowired无法把RedisUtil注入进来
- * 这样自动去注入当使用的时候是未NULL,是注入不进去了。通俗的来讲是因为拦截器在spring扫描bean之前加载所以注入不进去。
- * 解决的方法:
- * 可以通过已经初始化之后applicationContext容器中去获取需要的bean.
- * */
- public T getBean(Class clazz,HttpServletRequest request){
- WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
- return applicationContext.getBean(clazz);
- }
-
- //刷新token
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- private String refreshToken(ServletRequest request,ServletResponse response) {
- System.out.println("refreshToken");
-
- HttpServletRequest req= (HttpServletRequest) request;
- RedisUtil redisUtil=getBean(RedisUtil.class,req);
- //获取传递过来的accessToken
- String accessToken=req.getHeader("Authorization");
- //获取token里面的用户名
- String username= JWTUtil.getUsername(accessToken);
- System.out.println("username"+username);
- //判断refreshToken是否过期了,过期了那么所含的username的键不存在
- System.out.println("redisUtil.hasKey(username)"+redisUtil.hasKey(username));
- if (redisUtil.hasKey(username)){
- //判断refresh的时间节点和传递过来的accessToken的时间节点是否一致,不一致校验失败
- long current= (long) redisUtil.get(username);
- if (current== JWTUtil.getExpire(accessToken)){
- //获取当前时间节点
- long currentTimeMillis = System.currentTimeMillis();
- //生成刷新的token
- String token=JWTUtil.createToken(username,currentTimeMillis);
- //刷新redis里面的refreshToken,过期时间是30min
- redisUtil.set(username,currentTimeMillis,30*60);
- //再次交给shiro进行认证
- JWTToken jwtToken=new JWTToken(token);
- try {
- getSubject(request, response).login(jwtToken);
- // 最后将刷新的AccessToken存放在Response的Header中的Authorization字段返回
- HttpServletResponse httpServletResponse = (HttpServletResponse) response;
- httpServletResponse.setHeader("Authorization", token);
- httpServletResponse.setHeader("Access-Control-Expose-Headers", "Authorization");
- return "success";
- }catch (Exception e){
- return e.getMessage();
- }
- }
- }
- return "token认证失效,token过期,重新登陆";
- }
-}
diff --git a/src/main/java/com/cetc32/dh/common/filter/KickoutSessionFilter.java b/src/main/java/com/cetc32/dh/common/filter/KickoutSessionFilter.java
deleted file mode 100644
index 5b9122ca4ee98d3fc9c5a8c910f63a36d3ab0d45..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/filter/KickoutSessionFilter.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/**
- * @Title: KickouSessionFilter
- * @Description: 进行用户访问控制
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-package com.cetc32.dh.common.filter;
-
-import com.cetc32.dh.common.IStatusMessage;
-import com.cetc32.dh.common.response.ResponseResult;
-import com.cetc32.dh.common.utils.ShiroFilterUtils;
-import com.cetc32.dh.entity.BaseAdminUser;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.shiro.cache.Cache;
-import org.apache.shiro.cache.CacheManager;
-import org.apache.shiro.session.Session;
-import org.apache.shiro.session.mgt.DefaultSessionKey;
-import org.apache.shiro.session.mgt.SessionManager;
-import org.apache.shiro.subject.Subject;
-import org.apache.shiro.web.filter.AccessControlFilter;
-import org.apache.shiro.web.util.WebUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.Serializable;
-import java.util.ArrayDeque;
-import java.util.Deque;
-
-/**
- * Token检查类
- * @Title: FormFilter
- * @version: 1.0
- * @date: 2020/9/11 10:55
- */
-public class KickoutSessionFilter extends AccessControlFilter {
-
- private static final Logger logger = LoggerFactory.getLogger(KickoutSessionFilter.class);
-
- private final static ObjectMapper objectMapper = new ObjectMapper();
-
- private String kickoutUrl; // 踢出后到的地址
- private boolean kickoutAfter = false; // 踢出之前登录的/之后登录的用户 默认false踢出之前登录的用户
- private int maxSession = 1; // 同一个帐号最大会话数 默认1
- private SessionManager sessionManager;
- private Cache> cache;
-
- public void setKickoutUrl(String kickoutUrl) {
- this.kickoutUrl = kickoutUrl;
- }
-
- public void setKickoutAfter(boolean kickoutAfter) {
- this.kickoutAfter = kickoutAfter;
- }
-
- public void setMaxSession(int maxSession) {
- this.maxSession = maxSession;
- }
-
- public void setSessionManager(SessionManager sessionManager) {
- this.sessionManager = sessionManager;
- }
-
- // 设置Cache的key的前缀
- public void setCacheManager(CacheManager cacheManager) {
- //必须和ehcache缓存配置中的缓存name一致
- this.cache = cacheManager.getCache("shiro-activeSessionCache");
- }
-
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception {
-// return false;
- return true;
- }
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- protected boolean onAccessDenied(ServletRequest request, ServletResponse response)throws Exception {
- Subject subject = getSubject(request,response);
- // 没有登录授权 且没有记住我
- if(!subject.isAuthenticated() && !subject.isRemembered()){
- // 如果没有登录,直接进行之后的流程
- return true;
- }
- // 获得用户请求的URI
- HttpServletRequest req=(HttpServletRequest) request;
- String path = req.getRequestURI();
- logger.info("===当前请求的uri:" + path);
-
- if(path.equals("/login")){
- return true;
- }
- Session session = subject.getSession();
- logger.info("session时间设置:" + String.valueOf(session.getTimeout()));
-
-
- try{
- // 当前用户
- BaseAdminUser user = (BaseAdminUser) subject.getPrincipal();
- String username = user.getSysUserName();
- logger.info("===当前用户username:" + username);
- Serializable sessionId = session.getId();
- logger.info("===当前用户sessionId:" + sessionId);
- // 读取缓存用户 没有就存入
- Deque deque = cache.get(username);
- logger.debug("===当前deque:" + deque);
- if (deque == null) {
- // 初始化队列
- deque = new ArrayDeque();
- }
- // 如果队列里没有此sessionId,且用户没有被踢出;放入队列
- if (!deque.contains(sessionId) && session.getAttribute("kickout") == null) {
- // 将sessionId存入队列
- deque.push(sessionId);
- // 将用户的sessionId队列缓存
- cache.put(username, deque);
- }
- // 如果队列里的sessionId数超出最大会话数,开始踢人
- while (deque.size() > maxSession) {
- logger.debug("===deque队列长度:" + deque.size());
- Serializable kickoutSessionId = null;
- // 是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;
- if (kickoutAfter) { // 如果踢出后者
- kickoutSessionId = deque.removeFirst();
- } else { // 否则踢出前者
- kickoutSessionId = deque.removeLast();
- }
- // 踢出后再更新下缓存队列
- cache.put(username, deque);
- try{
- // 获取被踢出的sessionId的session对象
- Session kickoutSession = sessionManager
- .getSession(new DefaultSessionKey(kickoutSessionId));
- if (kickoutSession != null) {
- // 设置会话的kickout属性表示踢出了
- kickoutSession.setAttribute("kickout", true);
- }
- }catch (Exception e){
-
- }
- }
-
- // 如果被踢出了,(前者或后者)直接退出,重定向到踢出后的地址
- if ((Boolean) session.getAttribute("kickout") != null
- && (Boolean) session.getAttribute("kickout") == true){
- // 会话被踢出了
- try {
- // 退出登录
- subject.logout();
- } catch (Exception e) { // ignore
- }
- saveRequest(request);
- logger.debug("===踢出后用户重定向的路径kickoutUrl:" + kickoutUrl);
- return isAjaxResponse(request,response);
- }
- return true;
- }catch (Exception e){
- logger.error("控制用户在线数量【KickoutSessionFilter.onAccessDenied】异常!", e);
- return isAjaxResponse(request,response);
- }
- }
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- public static void out(ServletResponse response, ResponseResult result){
- PrintWriter out = null;
- try {
- response.setCharacterEncoding("UTF-8");//设置编码
- response.setContentType("application/json");//设置返回类型
- out = response.getWriter();
- out.println(objectMapper.writeValueAsString(result));//输出
- logger.info("用户在线数量限制【KickoutSessionFilter.out】响应json信息成功");
- } catch (Exception e) {
- logger.error("用户在线数量限制【KickoutSessionFilter.out】响应json信息出错", e);
- }finally{
- if(null != out){
- out.flush();
- out.close();
- }
- }
- }
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- private boolean isAjaxResponse(ServletRequest request,
- ServletResponse response) throws IOException {
- // ajax请求
- /**
- * 判断是否已经踢出
- * 1.如果是Ajax 访问,那么给予json返回值提示。
- * 2.如果是普通请求,直接跳转到登录页
- */
- //判断是不是Ajax请求
- ResponseResult responseResult = new ResponseResult();
- if (ShiroFilterUtils.isAjax(request) ) {
- logger.info(getClass().getName()+ "当前用户已经在其他地方登录,并且是Ajax请求!");
- responseResult.setCode(IStatusMessage.SystemStatus.MANY_LOGINS.getCode());
- responseResult.setMessage("您已在别处登录,请您修改密码或重新登录");
- out(response, responseResult);
- }else{
- // 重定向
- WebUtils.issueRedirect(request, response, kickoutUrl);
- }
- return false;
-// return true;
- }
-
-
-}
diff --git a/src/main/java/com/cetc32/dh/common/response/PageDataResult.java b/src/main/java/com/cetc32/dh/common/response/PageDataResult.java
index 0b4fcad2ee2a214c76ac413f8837eb41bca3d741..96b8bb2ed31b885709083c669b080b89b2d2f946 100644
--- a/src/main/java/com/cetc32/dh/common/response/PageDataResult.java
+++ b/src/main/java/com/cetc32/dh/common/response/PageDataResult.java
@@ -19,9 +19,9 @@ import java.util.List;
* @version: 1.0
* @date: 2020/9/11 10:55
*/
-public class PageDataResult {
+public class PageDataResult extends ResponseMessage{
- private Integer code=200;
+ //private Integer code=200;
//总记录数量
private Integer totals;
@@ -63,13 +63,13 @@ public class PageDataResult {
}
- public Integer getCode() {
+ /*public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
- }
+ }*/
public Integer getTotals() {
return totals;
diff --git a/src/main/java/com/cetc32/dh/common/response/ResponseData.java b/src/main/java/com/cetc32/dh/common/response/ResponseData.java
index 142ff025c86b7908c3d9d55dde1f58bbc7a6d7a7..f7bbd912a30679c97935ce9bf22071fae89fddc5 100644
--- a/src/main/java/com/cetc32/dh/common/response/ResponseData.java
+++ b/src/main/java/com/cetc32/dh/common/response/ResponseData.java
@@ -2,43 +2,40 @@ package com.cetc32.dh.common.response;
import com.cetc32.dh.common.IStatusMessage;
-public class ResponseData {
+public class ResponseData extends ResponseMessage{
- private String code;
- private String message;
+ //private String code;
+ //private String message;
private Object data;
public ResponseData() {
- this.code = IStatusMessage.SystemStatus.SUCCESS.getCode();
+ this.code = Integer.valueOf(IStatusMessage.SystemStatus.SUCCESS.getCode());
this.message = IStatusMessage.SystemStatus.SUCCESS.getMessage();
}
public ResponseData(IStatusMessage statusMessage){
- this.code = statusMessage.getCode();
+ this.code = Integer.valueOf(statusMessage.getCode());
this.message = statusMessage.getMessage();
}
public ResponseData(String mg){
- this.code="200";
- this.message=mg;
+ this(mg,null);
}
public ResponseData(String mg,Object obj){
- this.code="200";
- this.data=obj;
- this.message=mg;
+ this("200",mg,obj);
}
public ResponseData(String code ,String mg,Object obj){
- this.code=code;
+ this.code=Integer.valueOf(code);
this.data=obj;
this.message=mg;
}
- public String getCode() {
+ /*public String getCode() {
return code;
- }
+ }*/
- public void setCode(String code) {
+ /*public void setCode(String code) {
this.code = code;
- }
+ }*/
public String getMessage() {
return message;
@@ -84,21 +81,20 @@ public class ResponseData {
}
/**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
+ * 构造函数重载指定缓存失效时间
+ * @param code 状态码
+ * @param msg 描述消息
+ * @param data 反馈的数据
* @return
* 修改信息:
*/
public static ResponseData fail(int code, String msg, Object data) {
- ResponseData r = new ResponseData();
- r.setCode(code+"");
- r.setMessage(msg);
- r.setData(data);
- return r;
+ return new ResponseData(code+"",msg,data);
}
-
+ /**
+ * 重写toString()方法
+ * **/
@Override
public String toString() {
return "ResponseData{" + "code='" + code + '\'' + ", message='"
diff --git a/src/main/java/com/cetc32/dh/common/response/ResponseMessage.java b/src/main/java/com/cetc32/dh/common/response/ResponseMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef184a75a31908c54f026190262f9fb76ff56d6b
--- /dev/null
+++ b/src/main/java/com/cetc32/dh/common/response/ResponseMessage.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright(C) CETC-32
+ * @Description:抽象响应消息
+ * @Author :徐文远
+ * @version:1.0
+ * @date : 2021/1/30 下午1:43
+ ******************************************************************************/
+package com.cetc32.dh.common.response;
+
+public abstract class ResponseMessage {
+ protected int code;
+ protected String message;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/src/main/java/com/cetc32/dh/common/response/ResponseResult.java b/src/main/java/com/cetc32/dh/common/response/ResponseResult.java
index b4e57fd3bc192a8ac28a42a2c5932e3304b32c76..ef6b39345e4ebdede19931e4bca833bd783ef90f 100644
--- a/src/main/java/com/cetc32/dh/common/response/ResponseResult.java
+++ b/src/main/java/com/cetc32/dh/common/response/ResponseResult.java
@@ -18,44 +18,42 @@ import java.io.Serializable;
* @version: 1.0
* @date: 2020/9/11 10:55
**/
-public class ResponseResult implements Serializable{
+@Deprecated
+public class ResponseResult extends ResponseMessage implements Serializable{
- private String code;
- private String message;
+ /* private String code;
+ private String message;*/
private Object obj;
public ResponseResult() {
- this.code = IStatusMessage.SystemStatus.SUCCESS.getCode();
+ this.code = Integer.valueOf(IStatusMessage.SystemStatus.SUCCESS.getCode());
this.message = IStatusMessage.SystemStatus.SUCCESS.getMessage();
}
public ResponseResult(IStatusMessage statusMessage){
- this.code = statusMessage.getCode();
+ this.code = Integer.valueOf(statusMessage.getCode());
this.message = statusMessage.getMessage();
}
public ResponseResult(String mg){
- this.code="200";
- this.message=mg;
+ this(mg,null);
}
public ResponseResult(String mg,Object obj){
- this.code="200";
- this.obj=obj;
- this.message=mg;
+ this("200",mg,null);
}
public ResponseResult(String code ,String mg,Object obj){
- this.code=code;
+ this.code=Integer.valueOf(code);
this.obj=obj;
this.message=mg;
}
- public String getCode() {
+ /* public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
-
+*/
public String getMessage() {
return message;
}
@@ -101,23 +99,16 @@ public class ResponseResult implements Serializable{
/**
* 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
+ * @param code 键
+ * @param msg 时间(秒)
* @return
* 修改信息:
*/
public static ResponseResult fail(int code, String msg, Object data) {
- ResponseResult r = new ResponseResult();
- r.setCode(code+"");
- r.setMessage(msg);
- r.setObj(data);
- return r;
+ return new ResponseResult(code+"",msg,data);
}
/**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
* @return
* 修改信息:
*/
diff --git a/src/main/java/com/cetc32/dh/common/shiro/CenterAuthRealm.java b/src/main/java/com/cetc32/dh/common/shiro/CenterAuthRealm.java
deleted file mode 100644
index 0ea702d41a794cea5f6f4b741292dadf7357a989..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/shiro/CenterAuthRealm.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
- * @Title: CenterAuthRealm
- * @Description: 根据token判断此Authenticator是否使用该realm
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-
-package com.cetc32.dh.common.shiro;
-
-import com.auth0.jwt.exceptions.TokenExpiredException;
-import com.cetc32.dh.common.utils.JWTUtil;
-import com.cetc32.dh.config.JWTToken;
-import com.cetc32.dh.config.RedisUtil;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.AuthenticationInfo;
-import org.apache.shiro.authc.AuthenticationToken;
-import org.apache.shiro.authc.SimpleAuthenticationInfo;
-import org.apache.shiro.authz.AuthorizationInfo;
-import org.apache.shiro.authz.SimpleAuthorizationInfo;
-import org.apache.shiro.realm.AuthorizingRealm;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-/**
- * Token检查类
- * @Title: FormFilter
- * @version: 1.0
- * @date: 2020/9/11 10:55
- */
-@Component
-public class CenterAuthRealm extends AuthorizingRealm {
- /* @Autowired
- private UserService userService;*/
- @Autowired
- private RedisUtil redisUtil;
-
- //根据token判断此Authenticator是否使用该realm
- //必须重写不然shiro会报错
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- public boolean supports(AuthenticationToken token) {
- return token instanceof JWTToken;
- }
-
- /**
- * 只有当需要检测用户权限的时候才会调用此方法,例如@RequiresRoles,@RequiresPermissions之类的
- */
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- System.out.println("授权~~~~~");
- String token=principals.toString();
- String username= JWTUtil.getUsername(token);
- /*User user=userService.getUser(username);*/
- SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();
- //查询数据库来获取用户的角色
- /*info.addRole(user.getRoles());
- //查询数据库来获取用户的权限
- info.addStringPermission(user.getPermission());*/
- return info;
- }
-
-
- /**
- * 默认使用此方法进行用户名正确与否验证,错误抛出异常即可,在需要用户认证和鉴权的时候才会调用
- */
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
- System.out.println("认证~~~~~~~");
- String jwt= (String) token.getCredentials();
- String username= null;
- try {
- username= JWTUtil.getUsername(jwt);
- }catch (Exception e){
- throw new AuthenticationException("token非法,不是规范的token,可能被篡改了,或者过期了");
- }
- if (username==null){
- throw new AuthenticationException("token中无用户名");
- }
- /*User user=userService.getUser(username);*/
- /*if (user==null){
- throw new AuthenticationException("该用户不存在");
- }*/
- //开始认证,只要AccessToken没有过期,或者refreshToken的时间节点和AccessToken一致即可
- if (redisUtil.hasKey(username)){
- //判断AccessToken有无过期
- if (!JWTUtil.verify(jwt)){
- throw new TokenExpiredException("token认证失效,token过期,重新登陆");
- }else {
- //判断AccessToken和refreshToken的时间节点是否一致
- long current= (long) redisUtil.get(username);
- if (current==JWTUtil.getExpire(jwt)){
- return new SimpleAuthenticationInfo(jwt,jwt,"MyRealm");
- }else{
- throw new AuthenticationException("token已经失效,请重新登录!");
- }
- }
- }else{
- throw new AuthenticationException("token过期或者Token错误!!");
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/com/cetc32/dh/common/shiro/CenterAuthShiroConfig.java b/src/main/java/com/cetc32/dh/common/shiro/CenterAuthShiroConfig.java
deleted file mode 100644
index d06c8ae12fcfdbbeab0aa760852bd47a5f4dd401..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/shiro/CenterAuthShiroConfig.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/**
- * @Title: CenterAuthShiroConfig
- * @Description: Shiro安全认证
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-
-package com.cetc32.dh.common.shiro;
-
-import com.cetc32.dh.common.filter.JWTFilter;
-import org.apache.shiro.cas.CasFilter;
-import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
-import org.apache.shiro.mgt.DefaultSubjectDAO;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-import org.jasig.cas.client.session.SingleSignOutFilter;
-import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
-import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.DependsOn;
-import org.springframework.core.Ordered;
-import org.springframework.core.annotation.Order;
-import org.springframework.web.filter.DelegatingFilterProxy;
-
-import javax.servlet.Filter;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * Token检查类
- * @Title: FormFilter
- * @version: 1.0
- * @date: 2020/9/11 10:55
- */
-@Configuration
-public class CenterAuthShiroConfig {
-
-// //cas server地址
-// public static final String casServerUrlPrefix="http://www.cetc.daohang.com:9100/cas";
-//
-// //cas登录页面地址
-// public static final String casLoginUrl = casServerUrlPrefix + "/login";
-//
-// //cas登出页面地址
-// public static final String casLogoutUrl = casServerUrlPrefix + "/logout";
-//
-// //当前工程对外提供的服务地址
-// public static final String shiroServerUrlPrefix = "http://localhost:9100";
-//
-// //casFilter UrlPattern
-// public static final String casFilterUrlPattern = "/cas";
-//
-// //登录地址
-// public static final String loginUrl = casLoginUrl + "?service=" + shiroServerUrlPrefix + casFilterUrlPattern;
-//
-// // 登出地址(casserver启用service跳转功能,需在webapps\cas\WEB-INF\cas.properties文件中启用cas.logout.followServiceRedirects=true)
-// public static final String logoutUrl = casLogoutUrl + "?service=" + shiroServerUrlPrefix;
-//
-// //登录成功地址
-// public static final String loginSuccessUrl = "/user";
-//
-// //限认证失败跳转地址
-// public static final String unauthorizedUrl = "/403.html";
-//
-// @Value("${jedis.pool.host}")
-// private String host;
-//
-// @Value("${jedis.pool.port}")
-// private int port;
-
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Bean(name = "securityManager")
- public DefaultWebSecurityManager securityManager(CenterAuthRealm centerAuthRealm){
- DefaultWebSecurityManager securityManager=new DefaultWebSecurityManager();
- // 设置自定义 realm.
- securityManager.setRealm(centerAuthRealm);
-
- //关闭session
- DefaultSubjectDAO subjectDAO=new DefaultSubjectDAO();
- DefaultSessionStorageEvaluator sessionStorageEvaluator=new DefaultSessionStorageEvaluator();
- sessionStorageEvaluator.setSessionStorageEnabled(false);
- subjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator);
- securityManager.setSubjectDAO(subjectDAO);
- return securityManager;
- }
-
-// /**
-// * 注册单点登出listener
-// *
-// * @return
-// */
-// @Bean
-// @Order(Ordered.HIGHEST_PRECEDENCE)
-// public ServletListenerRegistrationBean singleSignOutHttpSessionListener() {
-// ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
-// bean.setListener(new SingleSignOutHttpSessionListener());
-// bean.setEnabled(true);
-// return bean;
-// }
-//
-// /**
-// * 注册单点登出filter
-// *
-// * @return
-// */
-// @Bean
-// public FilterRegistrationBean singleSignOutFilter() {
-// FilterRegistrationBean bean = new FilterRegistrationBean();
-// bean.setName("singleSignOutFilter");
-// bean.setFilter(new SingleSignOutFilter());
-// bean.addUrlPatterns("/*");
-// bean.setEnabled(true);
-// return bean;
-// }
-//
-// /**
-// * 注册DelegatingFilterProxy(Shiro)
-// *
-// * @return
-// */
-// @Bean
-// public FilterRegistrationBean delegatingFilterProxy() {
-// FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
-// filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));
-// // 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理
-// filterRegistration.addInitParameter("targetFilterLifecycle", "true");
-// filterRegistration.setEnabled(true);
-// filterRegistration.addUrlPatterns("/*");
-// return filterRegistration;
-// }
-
-// /**
-// * CAS过滤器
-// *
-// * @return
-// */
-// @Bean(name = "casFilter")
-// public CasFilter getCasFilter() {
-// CasFilter casFilter = new CasFilter();
-// casFilter.setName("casFilter");
-// casFilter.setEnabled(true);
-// // 登录失败后跳转的URL,也就是 Shiro 执行 CasRealm 的 doGetAuthenticationInfo 方法向CasServer验证tiket
-// casFilter.setFailureUrl(loginUrl);// 我们选择认证失败后再打开登录页面
-// casFilter.setSuccessUrl(loginSuccessUrl);
-// return casFilter;
-// }
-
-
-
- /**
- * 先走 filter ,然后 filter 如果检测到请求头存在 token,则用 token 去 login,走 Realm 去验证
- */
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Bean
- public ShiroFilterFactoryBean factory(@Qualifier("securityManager")DefaultWebSecurityManager securityManager){
- ShiroFilterFactoryBean factoryBean=new ShiroFilterFactoryBean();
- factoryBean.setSecurityManager(securityManager);
- // 添加自己的过滤器并且取名为jwt
- Map filterMap=new LinkedHashMap<>();
- //设置我们自定义的JWT过滤器
- filterMap.put("jwt",new JWTFilter());
- factoryBean.setFilters(filterMap);
-
- // 设置无权限时跳转的 url;
- factoryBean.setUnauthorizedUrl("/unauthorized/无权限");
- Map filterRuleMap=new HashMap<>();
- // 所有请求通过我们自己的JWT Filter
- filterRuleMap.put("/**","jwt");
- // 访问 /unauthorized/** 不通过JWTFilter
- filterRuleMap.put("/unauthorized/**","anon");
- filterRuleMap.put("/open/**","anon");
- //filterRuleMap.put("/rest/**","anon");
- factoryBean.setFilterChainDefinitionMap(filterRuleMap);
- return factoryBean;
- }
-
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Bean
- public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
- return new LifecycleBeanPostProcessor();
- }
-
-
-
- /**
- * 添加注解支持,如果不加的话很有可能注解失效
- */
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Bean
- // @DependsOn({"lifecycleBeanPostProcessor"})
- public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){
-
- DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator();
- defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
- return defaultAdvisorAutoProxyCreator;
- }
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- @Bean
- public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){
-
- AuthorizationAttributeSourceAdvisor advisor=new AuthorizationAttributeSourceAdvisor();
- advisor.setSecurityManager(securityManager);
- return advisor;
- }
-
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/cetc32/dh/common/shiro/CustomRealm.java b/src/main/java/com/cetc32/dh/common/shiro/CustomRealm.java
deleted file mode 100644
index 4ba5fad142d014cfb769f14d1613662a041d3b0a..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/shiro/CustomRealm.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/**
- * @Title: CenterAuthShiroConfig
- * @Description: 自定义Realm
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-
-package com.cetc32.dh.common.shiro;
-
-import com.cetc32.dh.beans.ResultUserRole;
-import com.cetc32.dh.entity.BaseAdminRole;
-import com.cetc32.dh.dto.PermissionDTO;
-import com.cetc32.dh.entity.BaseAdminPermission;
-import com.cetc32.dh.entity.BaseAdminUser;
-import com.cetc32.dh.mybatis.BaseAdminPermissionMapper;
-import com.cetc32.dh.mybatis.BaseAdminRoleMapper;
-import com.cetc32.dh.service.AdminRoleService;
-import com.cetc32.dh.service.AdminUserService;
-import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.apache.shiro.authc.*;
-import org.apache.shiro.authz.AuthorizationInfo;
-import org.apache.shiro.authz.SimpleAuthorizationInfo;
-import org.apache.shiro.cas.CasRealm;
-import org.apache.shiro.subject.PrincipalCollection;
-import org.apache.shiro.util.ByteSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * Token检查类
- * @Title: FormFilter
- * @version: 1.0
- * @date: 2020/9/11 10:55
- */
-public class CustomRealm extends CasRealm {
-
- private Logger log = LoggerFactory.getLogger(this.getClass());
-
- @Autowired
- private AdminUserService userService;
- @Autowired
- private BaseAdminUser baseAdminUser;
- @Autowired
- private AdminRoleService roleService;
- @Autowired
- private BaseAdminPermissionMapper permissionMapper;
- @Autowired
- private BaseAdminRoleMapper roleMapper;
- //模拟数据库的数据
- Map map=new HashMap();
- {
- map.put("jarWorker","123");
- super.setName("customRealm");
- }
- /**
- * 授权使用
- * @param principals
- * @return
- */
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- BaseAdminUser userName=(BaseAdminUser) principals.getPrimaryPrincipal();
- Set roles=getRolesByUserName(userName.getSysUserName());
- Set permissions=getPermissionsByUserName(userName.getSysUserName());
- SimpleAuthorizationInfo simpleAuthorizationInfo=new SimpleAuthorizationInfo();
- log.info("开始授权");
- simpleAuthorizationInfo.setRoles(roles);
- simpleAuthorizationInfo.setStringPermissions(permissions);
- return simpleAuthorizationInfo;
- }
-
-
- /**
- * 认证使用
- * @param
- * @return
- */
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
-// //从主体传过来的认证信息中获取用户名
-// String userName=(String) token.getPrincipal();//获取用户名
-// String passWord=getPassword(userName);
-// if(passWord==null){
-// return null;
-// }
-// SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo("",passWord,"customRealm");
-// return simpleAuthenticationInfo;
- //UsernamePasswordToken用于存放提交的登录信息
- UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
- log.info("用户登录认证:验证当前Subject时获取到token为:" + ReflectionToStringBuilder
- .toString(token, ToStringStyle.MULTI_LINE_STYLE));
- String username = token.getUsername();
- // 调用数据层
- BaseAdminUser sysUser = userService.findByUserName(username);
- log.debug("用户登录认证!用户信息user:" + sysUser);
- if (sysUser == null) {
- // 用户不存在
- return null;
- }
- // 返回密码
- return new SimpleAuthenticationInfo(sysUser, sysUser.getSysUserPwd(), ByteSource.Util.bytes(username), getName());
-
- }
-
- /**
- * 数据库信息获取用户密码
- * @param userName
- * @return
- */
- private String getPassword(String userName) {
- if(null==userName){
- return null;
- }
- BaseAdminUser adminUser = new BaseAdminUser();
- adminUser = userService.findByUserName(userName);
- String pwd = adminUser.getSysUserPwd();
- return pwd;
- }
-
- /**
- * 数据库获取用户角色
- * @param userName
- * @return
- */
- private Set getRolesByUserName(String userName) {
-// Set roles=new HashSet();
-// roles.add("admin");
-// roles.add("tourist");
-// return roles;
-
- Set roles = new HashSet();
-
- BaseAdminUser user = userService.findByUserName(userName);
- List roleId = Stream.of(user.getRoleId().split(",")).map(Integer::parseInt).collect(Collectors.toList());
- for(Integer rid:roleId)
- {
- BaseAdminRole baseAdminRole = roleMapper.selectByPrimaryKey(rid);
- roles.add(baseAdminRole.getRoleName());
- }
- return roles;
-
- }
-
- /**
- * 模拟数据库获取用户权限
- * @param userName
- * @return
- */
- private Set getPermissionsByUserName(String userName) {
- /*Set permissions=new HashSet();
- permissions.add("user:update");
- permissions.add("user:query");
- return permissions;*/
- Set per = new HashSet();
- BaseAdminUser user = userService.findByUserName(userName);
- List roleId = Stream.of(user.getRoleId().split(",")).map(Integer::parseInt).collect(Collectors.toList());
- List rids=new ArrayList<>();
- for(Integer rid:roleId)
- {
- ResultUserRole baseAdminRole = roleService.findRoleById(rid);
-// String permissions = role.getPermissions();
-// rids.addAll(Arrays.asList(permissions.split(",")));
- }
- rids=rids.stream().distinct().collect(Collectors.toList());
- if (rids.size()>0) {
- List permissionList = new ArrayList <>();
- for (String id : rids) {
- // 角色对应的权限数据
- BaseAdminPermission perm = permissionMapper.selectByPrimaryKey(id);
- if (null != perm ) {
- // 授权角色下所有权限
- PermissionDTO permissionDTO = new PermissionDTO();
- BeanUtils.copyProperties(perm,permissionDTO);
- //获取子权限
- List childrens = permissionMapper.getPermissionListByPId(perm.getId());
- permissionDTO.setChildrens(childrens);
-
- permissionList.add(permissionDTO);
- }
- }
-
- for(PermissionDTO permissionDTO:permissionList){
- per.add(permissionDTO.getName());
- }
-
-
- }
- return per;
-
- }
-}
diff --git a/src/main/java/com/cetc32/dh/common/utils/JWTUtil.java b/src/main/java/com/cetc32/dh/common/utils/JWTUtil.java
deleted file mode 100644
index 9ab25776d1640b36f5777dce23b1423788dee3fd..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/common/utils/JWTUtil.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * @Title: CenterAuthShiroConfig
- * @Description: 自定义Realm
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-package com.cetc32.dh.common.utils;
-
-import com.auth0.jwt.JWT;
-import com.auth0.jwt.JWTVerifier;
-import com.auth0.jwt.algorithms.Algorithm;
-import com.auth0.jwt.exceptions.JWTDecodeException;
-import com.auth0.jwt.interfaces.DecodedJWT;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-/**
- * 响应状态信息接口
- * @author: youqing
- * @version: 1.0
- * @date: 2020/9/11 10:55
- * 更改描述:
- */
-public class JWTUtil {
- //token有效时长
- private static final long EXPIRE=2*60*60*1000;
- //token的密钥
- private static final String SECRET="jwt+shiro+32s";
-
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- public static String createToken(String username,long current){
- Date date= new Date(current+EXPIRE);
- //JWT的header部分
- Map map =new HashMap<>();
- map.put("alg","HS256");
- map.put("typ","JWT");
-
- //使用JWT生成 token
- String token=null;
- try{
- token= JWT.create()
- .withHeader(map)
- .withClaim("username",username)
- .withClaim("current",current)
- .withIssuedAt(new Date())
- .withExpiresAt(date)
- .sign(Algorithm.HMAC256(SECRET));
- }catch (UnsupportedEncodingException e){
- e.printStackTrace();
- }
- return token;
- }
-
- ////校验token的有效性,1、token的header和payload是否没改过;2、没有过期
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- public static boolean verify(String token){
- try{
- JWTVerifier verifier=JWT.require(Algorithm.HMAC256(SECRET)).build();
- verifier.verify(token);
- return true;
- }catch ( Exception e){
-
- }
- return false;
- }
- //无需解密也可以获取token的信息
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- public static String getUsername(String token){
- try {
- DecodedJWT jwt = JWT.decode(token);
- return jwt.getClaim("username").asString();
- } catch (JWTDecodeException e) {
- return null;
- }
- }
-
- //获取过期时间
- /**
- * 指定缓存失效时间
- * @param key 键
- * @param time 时间(秒)
- * @return
- * 修改信息:
- */
- public static long getExpire(String token){
- try {
- DecodedJWT jwt = JWT.decode(token);
- return jwt.getClaim("exp").asLong();
- }catch (Exception e){
- return System.currentTimeMillis()/1000;
- }
- }
-}
diff --git a/src/main/java/com/cetc32/dh/controller/rest/AreaCommonController.java b/src/main/java/com/cetc32/dh/controller/rest/AreaCommonController.java
index d833bf0cd9e8e08c94e6144c7e11a383b3bb048b..cc24f9c1d68b406f13742b5af550ed928781e166 100644
--- a/src/main/java/com/cetc32/dh/controller/rest/AreaCommonController.java
+++ b/src/main/java/com/cetc32/dh/controller/rest/AreaCommonController.java
@@ -6,9 +6,11 @@
******************************************************************************/
package com.cetc32.dh.controller.rest;
+import com.cetc32.dh.common.response.ResponseData;
import com.cetc32.dh.common.response.ResponseResult;
import com.cetc32.dh.entity.AreaCommon;
import com.cetc32.dh.service.AreaCommonService;
+import com.cetc32.webutil.common.annotations.LoginSkipped;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@@ -18,6 +20,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
import java.util.Arrays;
import java.util.List;
@@ -42,6 +47,7 @@ public class AreaCommonController {
@ApiImplicitParam(name = "id", value = "查询ID(key值)下的范围树,非必填,默认查询全国", dataType = "String"),
})
@RequestMapping(value = "/all", method = RequestMethod.GET)
+ @LoginSkipped
public ResponseResult areaCommonTree(String id) {
if (id == null) {
id = "100000";
@@ -74,5 +80,10 @@ public class AreaCommonController {
}
return ResponseResult.success(areaCommon);
}
+ @GetMapping("/0")
+ @LoginSkipped
+ public ResponseData allArea(){
+ return ResponseData.success( areaCommonService.selectAll());
+ }
}
diff --git a/src/main/java/com/cetc32/dh/controller/rest/AuthController.java b/src/main/java/com/cetc32/dh/controller/rest/AuthController.java
index 890d93adb72fe70eb548b5f9b1197be917eda8ca..e4253a5bceebddd0e24808730d5fb985b1878e04 100644
--- a/src/main/java/com/cetc32/dh/controller/rest/AuthController.java
+++ b/src/main/java/com/cetc32/dh/controller/rest/AuthController.java
@@ -8,26 +8,23 @@
package com.cetc32.dh.controller.rest;
-import com.cetc32.dh.beans.LoginParameter;
-import com.cetc32.dh.beans.LoginResult;
-import com.cetc32.dh.beans.ResultUserInfo;
-import com.cetc32.dh.common.response.PageDataResult;
+import com.alibaba.fastjson.JSONObject;
import com.cetc32.dh.beans.*;
import com.cetc32.dh.common.response.PageDataResult;
import com.cetc32.dh.common.response.ResponseData;
-import com.cetc32.dh.common.response.ResponseResult;
-import com.cetc32.dh.common.utils.JWTUtil;
import com.cetc32.dh.config.RedisUtil;
import com.cetc32.dh.entity.AreaCommon;
import com.cetc32.dh.entity.BaseAdminUser;
-import com.cetc32.dh.entity.NumberS;
import com.cetc32.dh.mybatis.AreaCommonMapper;
-import com.cetc32.dh.mybatis.BaseAdminUserMapper;
+import com.cetc32.dh.service.AdminRoleService;
import com.cetc32.dh.service.AdminUserService;
import com.cetc32.dh.service.AreaCommonService;
-import com.cetc32.dh.service.impl.AdminRoleServiceImpl;
import com.cetc32.dh.service.impl.AdminUserServiceImpl;
+import com.cetc32.webutil.common.annotations.LoginRequired;
+import com.cetc32.webutil.common.annotations.LoginSkipped;
+import com.cetc32.webutil.common.util.CookieUtil;
import com.cetc32.dh.service.impl.AreaCommonServiceImpl;
+import com.cetc32.webutil.common.util.JWTUtil;
import com.google.inject.internal.util.$FinalizableWeakReference;
import com.google.inject.internal.util.$ObjectArrays;
import com.google.inject.internal.util.$ToStringBuilder;
@@ -35,7 +32,6 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
-
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -43,7 +39,6 @@ import javax.crypto.interfaces.PBEKey;
import javax.servlet.http.HttpServletRequest;
import java.awt.*;
import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -54,6 +49,10 @@ import java.util.stream.Collectors;
import com.cetc32.dh.common.utils.DigestUtils;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import static com.cetc32.dh.common.utils.Tools.isContainChinese;
import static com.cetc32.dh.common.utils.Tools.*;
/**
@@ -66,19 +65,26 @@ import static com.cetc32.dh.common.utils.Tools.*;
*/
@RestController
@RequestMapping("/rest/auth/")
+@LoginRequired(loginSuccess = true)
public class AuthController {
@Autowired
RedisUtil redisUtil;
@Autowired
- AdminUserServiceImpl userService;
+ AdminUserService userService;
@Autowired
- AreaCommonMapper areaCommonMapper;
+ AreaCommonService areaCommonMapper;
+
+ @Autowired
+ AdminRoleService adminRoleService;
/**
* 用户登陆
+ * @Description 用户登陆接口,登陆过程中需要更新用户的登陆时间,loginFailed次数等
+ * loginFailed每次登陆都要更新,且登陆失败或成功都要进行更新,且登陆失败
+ * 也需要更新登陆时间,且登陆登出时间保持为一致,为了统计在线人数
* @param loginParameter "包含username和password的json字符串"
* @return ResponseData
* 备注:无
@@ -89,39 +95,89 @@ public class AuthController {
@ApiImplicitParam(name = "password", value = "密码", paramType = "String")
})
@PostMapping("/login")
- public ResponseData login2(@RequestBody LoginParameter loginParameter){
+ @LoginSkipped
+ public ResponseData login2(@RequestBody LoginParameter loginParameter, HttpServletRequest request, HttpServletResponse response){
String username=loginParameter.getUsername();
String password=loginParameter.getPassword();
if(username==null || password==null || password.length()==0)
{
+ // loginFailed每次登陆都要更新,且登陆失败或成功都要进行更新,且登陆失败
+ // 也需要更新登陆时间,且登陆登出时间保持为一致,为了统计在线人数
return ResponseData.error("用户名和密码不能为空!");
}
BaseAdminUser user= userService.findByUserName(username);
if(user==null || !user.getSysUserPwd().equals(DigestUtils.Md5(username,password)))
{
+ // loginFailed每次登陆都要更新,且登陆失败或成功都要进行更新,且登陆失败
+ // 也需要更新登陆时间,且登陆登出时间保持为一致,为了统计在线人数
return ResponseData.error("账户信息有误或未审核!");
}
long currentTimeMillis = System.currentTimeMillis();
- String token= JWTUtil.createToken(username,currentTimeMillis);
- redisUtil.set(username,currentTimeMillis,60*30);
- LoginResult data=new LoginResult(token,
+ String jwtToken= JWTUtil.createToken(username,currentTimeMillis);
+ //String token =UUID.randomUUID().toString();
+ //redisUtil.set(token,jwtToken,60*30);
+ //redisUtil.set(token,currentTimeMillis,60*30);
+ LoginResult data=new LoginResult(jwtToken,
user.getDepartment(),
username,
user.getId(),
user.getRoleId(),
user.getSecurity(),
user.getAreacode(),
- JWTUtil.getExpire(token));
+ JWTUtil.getExpire(jwtToken));
+ CookieUtil.setCookie(request,response,"token",jwtToken,60*60*2,true);
return ResponseData.success(200,"success",data);
}
+ /**
+ * 监测用户名是否存在
+ * @param username
+ * **/
+ @LoginSkipped
+ @GetMapping("/user/exist")
+ public ResponseData findUserByName(String username){
+ System.out.println("username"+username);
+ BaseAdminUser user =userService.findByUserName(username);
+ if(user == null){
+ return ResponseData.success( true);
+ }else{
+ return ResponseData.success( false);
+ }
+ }
-
+ /***
+ * WEB端用户注册,默认
+ * @param userInfo 请求用户信息
+ * @return 返回用户是否添加成功
+ * **/
+ @LoginSkipped
+ @PostMapping("/apply")
+ public ResponseData apply(@RequestBody UserInfo userInfo){
+ BaseAdminUser user =new BaseAdminUser();
+ System.out.println(JSONObject.toJSONString(userInfo).toString());
+ user.setSysUserPwd(DigestUtils.Md5(userInfo.getUsername(),userInfo.getPassword()));
+ user.setUserStatus(-1);
+ user.setSysUserName(userInfo.getUsername());
+ user.setSecurity(userInfo.getSecurity());
+ user.setAreacode(userInfo.getAreacode());
+ if(userService.insertUser(user)>0)
+ {
+ return ResponseData.success("添加成功");
+ }
+ else {
+ return ResponseData.error("添加失败");
+ }
+ }
+ /**
+ *
+ *
+ ***/
@ApiOperation(value = "移动终端用户注册(固定角色、固定为非M权限)", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "username", value = "用户名", paramType = "String"),
@ApiImplicitParam(name = "password", value = "密码", paramType = "String")
})
@PostMapping(value="/register",produces = "application/json;charset=UTF-8")
+ @LoginSkipped
public ResponseData register(@RequestBody Map loginParameter){
Map reg=new HashMap<>();
reg.put("username",loginParameter.getOrDefault("username",null));
@@ -161,7 +217,7 @@ public class AuthController {
@ApiImplicitParam(name = "username", value = "用户名", paramType = "String"),
@ApiImplicitParam(name = "password", value = "密码", paramType = "String"),
@ApiImplicitParam(name = "role", value = "角色id列表", paramType = "List"),
- @ApiImplicitParam(name = "security", value = "密级(1:JM,2:MM,3:FM)", paramType = "Integer"),
+ @ApiImplicitParam(name = "security", value = "密级(1:JUEM,2:JIM,3:MM,4:FM)", paramType = "Integer"),
@ApiImplicitParam(name = "department", value = "部门id列表", paramType = "List"),
@ApiImplicitParam(name = "areacode", value = "区域id列表", paramType = "List")
})
@@ -177,7 +233,7 @@ public class AuthController {
{
return ResponseData.error("用户名已存在!");
}
- if(StringUtils.isBlank(userInfo.getSysUserPwd())){
+ if(userInfo.getSysUserPwd()==null || userInfo.getSysUserPwd().trim().isEmpty()){
userInfo.setSysUserPwd(DigestUtils.Md5(username,"123456"));
}
//默认用户有效
@@ -187,7 +243,7 @@ public class AuthController {
// TODO 默认安全等级
if(userInfo.getSecurity()==null)
{
- userInfo.setSecurity(3);
+ userInfo.setSecurity(4);
}
if(userService.insertUser(userInfo)>0)
{
@@ -247,6 +303,7 @@ public class AuthController {
// public PageDataResult getUserList(@RequestBody UserInfo user_info){
public PageDataResult getUserList(@RequestBody Map userInfo){
BaseAdminUser user_info=CreateUser(userInfo);
+ user_info.setUserStatus(1);
return new PageDataResult(userService.countUserByCondition(user_info),
userService.findUserByCondition(user_info),
user_info.getOffset());
@@ -362,8 +419,7 @@ public class AuthController {
}
/**
- * 注销
- * @param token
+ * 注销登陆,只需要清除cookies即可
* @return ResponseData
* 备注:无
*/
@@ -372,27 +428,25 @@ public class AuthController {
@ApiImplicitParam(name = "token", value = "登陆成功返回的token", paramType = "String"),
})
@PostMapping("/logout")
- public ResponseData logout(String token){
- if(token!=null)
- {
- String username=JWTUtil.getUsername(token);
- redisUtil.del(username);
- }
+ public ResponseData logout(HttpServletRequest req,HttpServletResponse rep){
+ CookieUtil.setCookie(req,rep,"token","",0,false);
return ResponseData.success();
}
/**
- * 注销
+ * 根据token获取用户信息
* @param token
* @return ResponseData
* 备注:无
*/
- @ApiOperation(value = "token校验", notes = "")
+ @ApiOperation(value = "token获取用户信息", notes = "")
@ApiImplicitParams({
@ApiImplicitParam(name = "token", value = "登陆成功返回的token", paramType = "String"),
})
- @RequestMapping("/token")
+ @GetMapping("/verify")
+ @PostMapping("/token")
+ @LoginSkipped
public ResponseData token(String token){
if(token!=null )
{
@@ -404,14 +458,24 @@ public class AuthController {
{
long currentTimeMillis = System.currentTimeMillis()/1000;
long exp=JWTUtil.getExpire(token);
+ ResultUserRole resultUserRole=null;
+ try{
+ String role =user.getRoleId().replaceAll(",","");
+ resultUserRole = adminRoleService.findRoleById(Integer.valueOf(role));
+ }catch (Exception e){
+ e.printStackTrace();
+ }
if(exp>currentTimeMillis)
{
ResultUserInfo data=new ResultUserInfo();
+ data.setId(user.getId());
data.setSecurity(user.getSecurity());
data.setAreacode(user.getAreacode());
data.setDepartment(user.getDepartment());
data.setRole(user.getRoleId());
data.setUsername(username);
+ if(resultUserRole!=null)
+ data.setPermissions(resultUserRole.getSystemMenu());
return ResponseData.success(200,"success",data);
}
else
@@ -432,7 +496,7 @@ public class AuthController {
* 备注:无
*/
@PostMapping(path = "/unauthorized/{message}")
- public ResponseResult unauthorized(@PathVariable String message) throws UnsupportedEncodingException {
- return ResponseResult.fail(message);
+ public ResponseData unauthorized(@PathVariable String message) throws UnsupportedEncodingException {
+ return ResponseData.error(message);
}
}
diff --git a/src/main/java/com/cetc32/dh/controller/rest/AuthRoleController.java b/src/main/java/com/cetc32/dh/controller/rest/AuthRoleController.java
index 19b7107db479997a9a7f3aa9288144bf44c31b67..2a5681cc7c2f202e90f4a3c566af889408c87e9c 100644
--- a/src/main/java/com/cetc32/dh/controller/rest/AuthRoleController.java
+++ b/src/main/java/com/cetc32/dh/controller/rest/AuthRoleController.java
@@ -10,6 +10,7 @@ import com.cetc32.dh.entity.BaseAdminUser;
import com.cetc32.dh.entity.NumberS;
import com.cetc32.dh.service.impl.AdminRoleServiceImpl;
import com.cetc32.dh.service.impl.AdminUserServiceImpl;
+import com.cetc32.webutil.common.annotations.AccessPermission;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@@ -40,6 +41,7 @@ public class AuthRoleController {
}
@ApiOperation(value = "获取角色列表(不分页)", notes = "")
+ @AccessPermission(permission = "haha")
@GetMapping(value = "/list")
public ResponseData getRolesList(){
return ResponseData.success(adminRoleService.getRoleList());
diff --git a/src/main/java/com/cetc32/dh/controller/rest/BaseController.java b/src/main/java/com/cetc32/dh/controller/rest/BaseController.java
index 36cfb4a957dd5c5e10796897597a7c0aacfb5c88..2e708e788a7d2252ee95c99ff28eb3049bb86095 100644
--- a/src/main/java/com/cetc32/dh/controller/rest/BaseController.java
+++ b/src/main/java/com/cetc32/dh/controller/rest/BaseController.java
@@ -22,7 +22,7 @@ public class BaseController {
BaseAdminUser baseAdminUser= (BaseAdminUser)SecurityUtils.getSubject().getPrincipal();//.getSession().getAttribute("currentUserId");
return baseAdminUser;//adminUserService.getUserById(id.intValue());
}
- @RequestMapping("/test/user")
+ //@RequestMapping("/test/user")
public String testUser(){
return getCurrentUserId().getSysUserName();
}
diff --git a/src/main/java/com/cetc32/dh/controller/rest/CityController.java b/src/main/java/com/cetc32/dh/controller/rest/CityController.java
deleted file mode 100644
index d3608bb3cc916cecd929e1ea4bcf9a37b2ffde1f..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/controller/rest/CityController.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*******************************************************************************
- * @Description:
- * @Author :肖小霞
- * @version:1.0
- * @date : 2021/1/21 下午4:45
- ******************************************************************************/
-package com.cetc32.dh.controller.rest;
-
-import com.cetc32.dh.common.response.ResponseResult;
-import com.cetc32.dh.entity.AreaCommon;
-import com.cetc32.dh.entity.City;
-import com.cetc32.dh.service.AreaCommonService;
-import com.cetc32.dh.service.CityService;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import java.util.*;
-
-/**
- * 数据管理地理信息接口操作类
- * @author: 肖小霞
- * @version: 1.0
- * @date: 2020/10/14
- * 备注:无
- */
-@RestController
-@RequestMapping("/rest/city/")
-public class CityController {
- @Autowired
- CityService cityService;
- @Autowired
- AreaCommonService areaCommonService;
-
- /**
- * 计算根据点集得出各城市的地理区域
- * @return 返回区域面结果
- * 备注:无
- */
- @ApiOperation(value = "北京城市的点")
- @PostMapping("/polygon")
- public ResponseResult polygon() {
- int count = 0;
- List areaCommonList = areaCommonService.selectAll();
- for (AreaCommon areaCommon : areaCommonList) {
- String result = "";
- String geom = "";
- List stringList = new ArrayList<>();
- if (cityService.selectByCityCode(areaCommon.getId()).size() > 0) {
- //搜集所有该城市数据
- List cityList = cityService.selectByCityCode(areaCommon.getId());
- Collections.sort(cityList, new Comparator() {
- public int compare(City c1, City c2) {
- return Integer.parseInt(c1.getFid()) - Integer.parseInt(c2.getFid());
- }
- });
- String start_end = null;
- for (int i = 0; i < cityList.size(); i++) {
- String s = cityList.get(i).getPointX();
- s = s + " ";
- s = s + cityList.get(i).getPointY();
- if (i == 0) {
- start_end = s;
- }
- stringList.add(s);
- }
- stringList.add(start_end);
- result = stringList.toString();
- //result ="(117.293890872000006 30.427812941999999, 117.293890872000006 30.427812941999999, 117.293890872000006 30.427812941999999, 117.293890872000006 30.427812941999999,118.293890872000006 33.427812941999999,110.293890872000006 36.427812941999999,117.293890872000006 30.427812941999999)";
- result = result.replace("[", "(");
- result = result.replace("]", ")");
- System.out.println(result);
- result = "POLYGON(" + result + ")";
- System.out.println(result);
-// geom = cityService.judge(result);
- }
- if (result != "") {
- areaCommon.setGeom(result);
- }
-
- if (areaCommonService.updateByCity(areaCommon) > 0) {
- count++;
- }
- }
- if (count > 0) {
- return ResponseResult.success("更新成功");
- } else {
- return ResponseResult.error("更新失败");
- }
-
-
- }
-
- /**
- * 判断某个点是否在一个面中
- * @return 返回判断结果
- * 备注:无
- */
- @ApiOperation(value = "判断点point是否在多边形polygon中")
- @PostMapping("/pointpolygon")
- public ResponseResult pointContain(@RequestBody Map map) {
- String point = (String) map.get("point");
- String polygon = (String) map.get("polygon");
-// String polygon ="POLYGON((1 1,1 6,6 6,6 1,1 1))";
-// String point ="POINT(2 2)";
- //经测试边界线上的点不包含在面中
- Boolean judge = cityService.judgePointContain(point, polygon);
- if (judge == true) {
- return ResponseResult.success("判断结果为:点point包含面polygon");
- } else {
- return ResponseResult.success("判断结果为:点point不包含面polygon");
- }
-
- }
-
- /**
- * 判断多边形polygon2是否在多边形polygon1中
- * @return 返回判断结果
- * 备注:无
- */
- @ApiOperation(value = "判断多边形polygon2是否在多边形polygon1中")
- @PostMapping("/jugpolygon")
- public ResponseResult polygonContain(@RequestBody Map map) {
- String area_big = (String) map.get("areaBig");
- String area_small = (String) map.get("areaSmall");
- String polygon1 = "POLYGON((1 1,1 6,6 6,6 1,1 1))";
- String polygon2 = "POLYGON((2 2,2 5,5 5,5 2,2 2))";
- //经测验多边形包含其本身
- Boolean judge = cityService.judgePolygonContain(area_big, area_small);
- if (judge == true) {
- return ResponseResult.success("判断结果为:面polygon1包含面polygon2");
- } else {
- return ResponseResult.success("判断结果为:面polygon1不包含面polygon2");
- }
-
- }
-
- // @ApiOperation(value = "当前用户名提交的数据")
-// @PostMapping("/jug")
-// public ResponseResult Judge() {
-//// String pointss ="POLYGON((98.31768 46.16992,127.59814 45.80590,108.78794 34.13706,93.2099 35.04692,98.31768 46.16992,98.31768 46.16992))";
-// String pointss ="POLYGON((116.67521 41.40101, 116.67611 41.04001, 116.68291 41.04291,98.31768 46.16992,98.31768 46.16992,116.67521 41.40101))";
-// String judge = cityService.judge(pointss);
-//
-// return ResponseResult.success("判断结果为:"+judge);
-// }
-
-
-}
diff --git a/src/main/java/com/cetc32/dh/controller/rest/DataCommonController.java b/src/main/java/com/cetc32/dh/controller/rest/DataCommonController.java
deleted file mode 100644
index 4c24b5a55dae5d3e54a817770c67bfb6e390ad21..0000000000000000000000000000000000000000
--- a/src/main/java/com/cetc32/dh/controller/rest/DataCommonController.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/*******************************************************************************
- * @Description:
- * @Author :肖小霞
- * @version:1.0
- * @date : 2021/1/21 下午4:45
- ******************************************************************************/
-package com.cetc32.dh.controller.rest;
-
-import com.cetc32.dh.common.response.PageDataResult;
-import com.cetc32.dh.common.response.ResponseResult;
-import com.cetc32.dh.entity.DataFile;
-import com.cetc32.dh.entity.DataPlp;
-import com.cetc32.dh.entity.DataTrace;
-import com.cetc32.dh.service.DataFileService;
-import com.cetc32.dh.service.DataMenuService;
-import com.cetc32.dh.service.DataPlpService;
-import com.cetc32.dh.service.DataTraceService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 数据管理公共接口
- * @author: xiao
- * @version: 1.0
- * @date: 2020/10/14
- * 备注:无
- */
-@Slf4j
-@RestController
-@RequestMapping("/rest/datamanage/common")
-public class DataCommonController {
- @Autowired
- private DataFileService dataFileService;
- @Autowired
- private DataPlpService dataPlpService;
- @Autowired
- private DataTraceService dataTraceService;
- @Autowired
- private DataMenuService dataMenuService;
-
-
- /**
- * 统计今日提交或审批数管个数
- *
- * @param map status审核
- * @return 返回查询个数结果
- * 备注:无
- */
- @PostMapping(value = "/todaydataCount")
- public ResponseResult countTodayData(@RequestBody Map map) {
- DataFile dataFile = new DataFile();
- DataTrace dataTrace = new DataTrace();
- DataPlp dataPlp = new DataPlp();
- int count_all;
- int count;
- String status = (String) map.get("status");
- LocalDateTime today_start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);//当天零点
- String td_start = today_start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- LocalDateTime today_end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);//当天最晚点
- String td_end = today_end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
- dataFile.setTd_start(td_start);
- dataFile.setTd_end(td_end);
- dataPlp.setTd_start(td_start);
- dataPlp.setTd_end(td_end);
- dataTrace.setTd_start(td_start);
- dataTrace.setTd_end(td_end);
- dataFile.setStatus(null);
- dataPlp.setStatus(null);
- dataTrace.setStatus(null);
- count_all = dataFileService.countFilesByObj(dataFile);
- count_all += dataPlpService.countFilesByObj(dataPlp);
- count_all += dataTraceService.countFilesByObj(dataTrace);
- if (status == null || status.contains("全部审批") || StringUtils.isBlank(status)) {
- return ResponseResult.success(count_all);
- } else {
- status = "未审批";
- dataFile.setStatus(status);
- dataPlp.setStatus(status);
- dataTrace.setStatus(status);
- count = dataFileService.countFilesByObj(dataFile);
- count += dataPlpService.countFilesByObj(dataPlp);
- count += dataTraceService.countFilesByObj(dataTrace);
- count_all = count_all - count;
- return ResponseResult.success(count_all);
- }
- }
-
- /**
- * 统计今日提交或审批数管个数
- *
- * @param map status审核
- * @return 返回查询个数结果
- * 备注:无
- */
- @PostMapping(value = "/todaydataShow")
- public PageDataResult showTodayData(@RequestBody Map map) {
- DataFile dataFile = new DataFile();
- DataTrace dataTrace = new DataTrace();
- DataPlp dataPlp = new DataPlp();
- int total;
- List