Commit ba96590e by 伍思炜

修复长时间未登录时需要修改密码但修改不了bug

parent 0faa7ed2
package com.winsun.aop;
import com.alibaba.fastjson.JSONObject;
import com.winsun.auth.core.common.model.ResponseData;
import com.winsun.auth.core.shiro.ShiroUser;
import com.winsun.auth.core.support.HttpKit;
import com.winsun.auth.model.common.Menu;
import com.winsun.interfaces.PermissionVerification;
import com.winsun.mapper.SysUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
* 基于服务层的权限切面
*
* @author Cocowwy
* @create 2021-11-11-13:59
*/
@Aspect
@Component
@Slf4j
public class AuthorityAspect {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private SysUserMapper sysUserMapper;
private final static String PERMISSION_VERIFICATION = "permissionVerification:";
private final static Integer CACHE_TIME = 60;
/**
* 对接口进行权限校验
*/
@Pointcut("@annotation(com.winsun.interfaces.PermissionVerification)")
private void pointcut() {
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
PermissionVerification permissionVerification = signature.getMethod().getDeclaredAnnotation(PermissionVerification.class);
if (permissionVerification != null) {
return apiIdempotent(joinPoint, signature);
}
Object proceed = joinPoint.proceed();
return proceed;
}
public Object apiIdempotent(ProceedingJoinPoint joinPoint, MethodSignature signature) throws Throwable {
ShiroUser user = getShiroUser();
/*if (user.getRoleNames().stream().anyMatch(roleName -> StringUtils.equalsAny(roleName, "超级管理员"))) {
Object proceed = joinPoint.proceed();
return proceed;
}*/
PermissionVerification permissionVerification = signature.getMethod().getDeclaredAnnotation(PermissionVerification.class);
if ("".equals(permissionVerification.value()[0]) || user == null) {
log.error("无权限");
return false;
}
List<Integer> roleList = user.getRoleList();
if (roleList.size() == 0) {
log.error("无权限");
return false;
}
String key = PERMISSION_VERIFICATION + getHttpServletRequest().getHeader("Authorization");
String[] values = permissionVerification.value();
String s = stringRedisTemplate.opsForValue().get(key);
List<Menu> roleMenu = null;
if (StringUtils.isNotBlank(s)) {
roleMenu = JSONObject.parseArray(s, Menu.class);
}else {
roleMenu = sysUserMapper.getRoleMenu(roleList);
stringRedisTemplate.opsForValue().set(key,
JSONObject.toJSONString(roleMenu),
CACHE_TIME, TimeUnit.SECONDS);
}
if (roleMenu == null || roleMenu.isEmpty()) {
return false;
}
for (String value : values) {
for (Menu menu : roleMenu) {
if (menu == null || StringUtils.isBlank(menu.getUrl())) {
continue;
}
if (StringUtils.equals(menu.getUrl(), value)) {
Object proceed = joinPoint.proceed();
return proceed;
}
}
}
return ResponseData.error("无权限");
}
protected ShiroUser getShiroUser() {
HttpServletRequest httpServletRequest = this.getHttpServletRequest();
Object Attr = httpServletRequest.getAttribute("user");
ShiroUser user = (ShiroUser) JSONObject.parseObject(Attr.toString(), ShiroUser.class);
return user;
}
protected HttpServletRequest getHttpServletRequest() {
return HttpKit.getRequest();
}
}
...@@ -2,8 +2,11 @@ package com.winsun.controller; ...@@ -2,8 +2,11 @@ package com.winsun.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.mapper.Wrapper;
import com.winsun.auth.core.annotion.Permission;
import com.winsun.auth.core.base.controller.BaseController;
import com.winsun.auth.core.common.model.ResponseData; import com.winsun.auth.core.common.model.ResponseData;
import com.winsun.bean.*; import com.winsun.bean.*;
import com.winsun.interfaces.PermissionVerification;
import com.winsun.mapper.*; import com.winsun.mapper.*;
import com.winsun.smsUtils.SendSmsAndMail; import com.winsun.smsUtils.SendSmsAndMail;
import com.winsun.utils.MyBatisPlusUpdateUtils; import com.winsun.utils.MyBatisPlusUpdateUtils;
...@@ -36,7 +39,7 @@ import java.util.regex.Pattern; ...@@ -36,7 +39,7 @@ import java.util.regex.Pattern;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/codesManager") // @RequestMapping("/codesManager") //
public class codeManagerController { public class codeManagerController extends BaseController {
@Autowired @Autowired
private RegularMapper regularMapper; private RegularMapper regularMapper;
@Autowired @Autowired
...@@ -81,7 +84,9 @@ public class codeManagerController { ...@@ -81,7 +84,9 @@ public class codeManagerController {
* @return * @return
*/ */
@ResponseBody @ResponseBody
@RequestMapping(value = "unlock", method = RequestMethod.POST) @PermissionVerification(value = {"/system/user"})
// @RequestMapping(value = "unlock", method = RequestMethod.POST)
@Permission(menuname = "解锁冻结", value = "unlock", method = RequestMethod.POST)
public ResponseData<String> unlock(String userId) { public ResponseData<String> unlock(String userId) {
SysUser sysUser = sysUserMapper.selectById(userId); SysUser sysUser = sysUserMapper.selectById(userId);
......
...@@ -54,6 +54,7 @@ public class LoginApplicaionConfig extends WebMvcConfigurationSupport { ...@@ -54,6 +54,7 @@ public class LoginApplicaionConfig extends WebMvcConfigurationSupport {
s.add("/mgr/userByUerId"); s.add("/mgr/userByUerId");
s.add("/mgr/releaseUser"); s.add("/mgr/releaseUser");
s.add("/mgr/codemessage"); s.add("/mgr/codemessage");
s.add("/mgr/changePwd");
s.add("/dept/selectDeptList"); s.add("/dept/selectDeptList");
s.add("/dept/selectDept"); s.add("/dept/selectDept");
s.add("/role/roleLable"); s.add("/role/roleLable");
......
...@@ -45,7 +45,8 @@ public class AuthConfigurationSupport extends WebMvcConfigurationSupport { ...@@ -45,7 +45,8 @@ public class AuthConfigurationSupport extends WebMvcConfigurationSupport {
s.add("/school/schoolManagement/importDate"); s.add("/school/schoolManagement/importDate");
s.add("/networkPlace/importDate"); s.add("/networkPlace/importDate");
s.add("/school/schoolManagement/qrcodeUpload"); s.add("/school/schoolManagement/qrcodeUpload");
s.add("/school/schoolManagement/qrcodeUpload2"); s.add("/packageManagement/package/backgroundUpload");
s.add("/packageManagement/package/xiaotuUpload");
registry.addInterceptor(authIntercept).excludePathPatterns(s); registry.addInterceptor(authIntercept).excludePathPatterns(s);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment