失败导出模板优化,登录权限拦截

master
cheney 2 years ago
parent a7b3289f21
commit eee34eec81
  1. 6
      pom.xml
  2. 19
      src/main/java/com/huoran/iasf/common/config/WebMvcConfigurer.java
  3. 2
      src/main/java/com/huoran/iasf/common/exception/code/BaseResponseCode.java
  4. 13
      src/main/java/com/huoran/iasf/common/exception/handler/RestExceptionHandler.java
  5. 97
      src/main/java/com/huoran/iasf/common/filter/AuthFilter.java
  6. 35
      src/main/java/com/huoran/iasf/common/shiro/CustomAccessControlFilter.java
  7. 88
      src/main/java/com/huoran/iasf/common/shiro/ShiroConfig.java
  8. 5
      src/main/java/com/huoran/iasf/common/utils/Constant.java
  9. 4
      src/main/java/com/huoran/iasf/controller/DeptController.java
  10. 24
      src/main/java/com/huoran/iasf/controller/ExceptionController.java
  11. 2
      src/main/java/com/huoran/iasf/controller/PermissionController.java
  12. 2
      src/main/java/com/huoran/iasf/controller/RoleController.java
  13. 2
      src/main/java/com/huoran/iasf/controller/RolePermissionController.java
  14. 18
      src/main/java/com/huoran/iasf/controller/SiteController.java
  15. 9
      src/main/java/com/huoran/iasf/controller/SysLogController.java
  16. 10
      src/main/java/com/huoran/iasf/controller/UserController.java
  17. 2
      src/main/java/com/huoran/iasf/controller/UserDeptController.java
  18. 6
      src/main/java/com/huoran/iasf/service/HttpApiSessionService.java
  19. 11
      src/main/java/com/huoran/iasf/service/HttpSessionService.java
  20. 15
      src/main/java/com/huoran/iasf/service/impl/UserServiceImpl.java
  21. 2
      src/main/resources/whiteList.properties

@ -52,6 +52,12 @@
<dependencies> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- 发送邮箱 --> <!-- 发送邮箱 -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>

@ -15,6 +15,9 @@ import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
@ -41,6 +44,22 @@ public class WebMvcConfigurer extends WebMvcConfigurationSupport {
private FileUploadProperties fileUploadProperties; private FileUploadProperties fileUploadProperties;
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*"); // 允许任何头
corsConfiguration.addAllowedOrigin("*"); // 允许任何头
corsConfiguration.addAllowedMethod("*"); // 允许任何方法(post、get等)
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); // 对接口配置跨域设置
return new CorsFilter(source);
}
/** /**
* 使用阿里 FastJson 作为JSON MessageConverter * 使用阿里 FastJson 作为JSON MessageConverter
*/ */

@ -35,7 +35,7 @@ public enum BaseResponseCode implements ResponseCodeInterface {
SUCCESS(200, "success"), SUCCESS(200, "success"),
EXCEL_FILE_FORMAT_ERROR(40007, "请根据模板使用说明录入正确的用户信息!"), EXCEL_FILE_FORMAT_ERROR(40007, "请根据模板使用说明录入正确的用户信息!"),
TOKEN_ERROR(401001, "登录凭证已过期,请重新登录"), TOKEN_ERROR(401, "登录凭证已过期,请重新登录"),
DATA_ERROR(401003, "传入数据异常"), DATA_ERROR(401003, "传入数据异常"),
NOT_ACCOUNT(401004, "该用户不存在,请先注册"), NOT_ACCOUNT(401004, "该用户不存在,请先注册"),
USER_LOCK(401005, "该用户已被锁定,请联系运营人员"), USER_LOCK(401005, "该用户已被锁定,请联系运营人员"),

@ -5,9 +5,11 @@ import com.huoran.iasf.common.exception.BusinessException;
import com.huoran.iasf.common.exception.code.BaseResponseCode; import com.huoran.iasf.common.exception.code.BaseResponseCode;
import com.huoran.iasf.common.utils.R; import com.huoran.iasf.common.utils.R;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.authz.AuthorizationException;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
@ -24,8 +26,8 @@ import java.util.concurrent.atomic.AtomicReference;
* @version V1.0 * @version V1.0
* @date 2022年7月28日 * @date 2022年7月28日
*/ */
@RestControllerAdvice
@Slf4j @Slf4j
@RestControllerAdvice
public class RestExceptionHandler { public class RestExceptionHandler {
/** /**
@ -37,11 +39,18 @@ public class RestExceptionHandler {
return R.getResult(BaseResponseCode.SYSTEM_BUSY); return R.getResult(BaseResponseCode.SYSTEM_BUSY);
} }
@ExceptionHandler(AuthenticationException.class)
public R authenticationException(AuthenticationException e) {
log.error("Exception,exception:{}", e, e);
// throw new BusinessException(BaseResponseCode.TOKEN_ERROR);
return new R(BaseResponseCode.TOKEN_ERROR.getCode(), BaseResponseCode.TOKEN_ERROR.getMsg());
}
/** /**
* 自定义全局异常处理 * 自定义全局异常处理
*/ */
@ExceptionHandler(value = BusinessException.class) @ExceptionHandler(value = BusinessException.class)
R businessExceptionHandler(BusinessException e) { public R businessExceptionHandler(BusinessException e) {
log.error("Exception,exception:{}", e, e); log.error("Exception,exception:{}", e, e);
BaseResponseCode em = e.getBaseResponseCode(); BaseResponseCode em = e.getBaseResponseCode();
return new R(em.getCode(), em.getMsg()); return new R(em.getCode(), em.getMsg());

@ -1,14 +1,18 @@
package com.huoran.iasf.common.filter; package com.huoran.iasf.common.filter;
import com.alibaba.fastjson.JSON;
import com.huoran.iasf.common.utils.R; import com.huoran.iasf.common.exception.BusinessException;
import com.huoran.iasf.service.HttpApiSessionService; import com.huoran.iasf.common.exception.code.BaseResponseCode;
import com.huoran.iasf.common.utils.Constant;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.*; import javax.servlet.*;
import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -16,33 +20,49 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import static com.huoran.iasf.service.HttpApiSessionService.USER_ID_KEY; import static com.huoran.iasf.service.HttpApiSessionService.*;
import static com.huoran.iasf.service.HttpApiSessionService.USER_USERNAME_KEY; import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED;
/**
* shiro过滤器 登录用户权限认证授权
* @author cheney
* @version V1.0
* @date 2022年7月28日
*/
@Slf4j @Slf4j
@WebFilter(filterName = "authFilter", urlPatterns = "/iasf/*") @WebFilter(filterName = "tokenFilter", urlPatterns = "/**")
@Order(1) @Order(1)
//@Component
public class AuthFilter implements Filter { public class AuthFilter implements Filter {
/** /**
* 白名单 * 白名单
*/ */
private static final String[] whiteList = private static final String[] whiteList =
{"/iasf/sys/user/login", {"/iasf/sys/user/login",
"/iasf/sys/exportFailure"}; "/iasf/sys/exportFailure","/iasf/sys/getVerify","/iasf/doc.html"};
@Resource //需要拦截的地址,验证token是否存在及有效
HttpApiSessionService httpApiSessionService;
//需要拦截的地址
@Override @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { @SneakyThrows
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
//每一次的请求先校验cookie
// HttpServletResponse httpResponse = (HttpServletResponse) response;
// HttpServletRequest httpRequest = (HttpServletRequest) request;
// httpResponse.setHeader("Access-Control-Allow-Origin", httpRequest.getHeader("Origin"));
// httpResponse.setHeader("Access-Control-Allow-Methods", httpRequest.getMethod());
// httpResponse.setHeader("Access-Control-Max-Age", "3600");
// httpResponse.setHeader("Access-Control-Allow-Headers", httpRequest.getHeader("Access-Control-Request-Headers"));
// chain.doFilter(request, response);
HttpServletRequest req = (HttpServletRequest) request; HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response; HttpServletResponse resp = (HttpServletResponse) response;
resp.setHeader("Access-Control-Allow-Origin","*"); resp.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
resp.setHeader("Access-Control-Allow-Credentials", "true"); resp.setHeader("Access-Control-Allow-Methods", req.getMethod());
resp.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); resp.setHeader("Access-Control-Max-Age", "3600");
resp.setHeader("Access-Control-Allow-Headers", "*"); resp.setHeader("Access-Control-Allow-Headers", req.getHeader("Access-Control-Request-Headers"));
String url = req.getRequestURI(); String url = req.getRequestURI();
log.info("url:{}", url); log.info("url:{}", url);
if (Arrays.asList(whiteList).contains(url)) { if (Arrays.asList(whiteList).contains(url)) {
chain.doFilter(request, response); chain.doFilter(request, response);
} else { } else {
@ -55,37 +75,38 @@ public class AuthFilter implements Filter {
} }
//token为空返回 //token为空返回
if (StringUtils.isBlank(token)) { if (StringUtils.isBlank(token)) {
resp.setStatus(401); request.setAttribute("filterError", new BusinessException(BaseResponseCode.TOKEN_ERROR));
responseResult(resp, R.fail("token不能为空")); // 指定处理该请求的处理器
request.getRequestDispatcher(Constant.ERROR_CONTROLLER_PATH).forward(request, response);
} }
// 校验并解析token,如果token过期或者篡改,则会返回null // 校验并解析token,如果token过期或者篡改,则会返回null
Claims claims = httpApiSessionService.checkJWT(token); Claims claims = checkJWT(token);
if (null == claims) { if (null == claims) {
resp.setStatus(401); request.setAttribute("filterError", new BusinessException(BaseResponseCode.TOKEN_ERROR));
responseResult(resp, R.fail("登陆失效,请重新登陆")); // 指定处理该请求的处理器
request.getRequestDispatcher(Constant.ERROR_CONTROLLER_PATH).forward(request, response);
}else {
// 校验通过后,设置用户信息到request里,在Controller中从Request域中获取用户信息
request.setAttribute(USER_ID_KEY, claims.get(USER_ID_KEY));
request.setAttribute(USER_USERNAME_KEY, claims.get(USER_USERNAME_KEY));
} }
//TODO 校验用户状态等 chain.doFilter(request, response);
// 校验通过后,设置用户信息到request里,在Controller中从Request域中获取用户信息
assert claims != null;
request.setAttribute(USER_ID_KEY, claims.get(USER_ID_KEY));
request.setAttribute(USER_USERNAME_KEY, claims.get(USER_USERNAME_KEY));
} }
} }
/** /**
* responseResult * 校验token
* @param response */
* @param result*/ public Claims checkJWT(String token) {
private void responseResult(HttpServletResponse response, R result) {
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-type", "application/json;charset=UTF-8");
// response.setStatus(200);
try { try {
response.getWriter().write(JSON.toJSONString(result)); final Claims claims = Jwts.parser().setSigningKey(APP_SECRET).
} catch (IOException ex) { parseClaimsJws(token).getBody();
log.error(ex.getMessage()); return claims;
} catch (Exception e) {
return null;
} }
} }
} }

@ -11,20 +11,25 @@ import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.Subject;
import org.apache.shiro.web.filter.AccessControlFilter; import org.apache.shiro.web.filter.AccessControlFilter;
import org.apache.shiro.web.util.WebUtils;
import org.springframework.http.HttpStatus;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED;
/** /**
* 自定义过滤器 * shiro过滤器 登录用户权限认证授权
*
* @author cheney * @author cheney
* @version V1.0 * @version V1.0
* @date 2022年7月28日 * @date 2022年7月28日
@ -32,6 +37,21 @@ import java.nio.charset.StandardCharsets;
@Slf4j @Slf4j
public class CustomAccessControlFilter extends AccessControlFilter { public class CustomAccessControlFilter extends AccessControlFilter {
// @Override
// protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
// HttpServletRequest httpRequest = WebUtils.toHttp(request);
// HttpServletResponse httpResponse = WebUtils.toHttp(response);
// if (httpRequest.getMethod().equals(RequestMethod.OPTIONS.name())) {
// httpResponse.setHeader("Access-control-Allow-Origin", httpRequest.getHeader("Origin"));
// httpResponse.setHeader("Access-Control-Allow-Methods", httpRequest.getMethod());
// // httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT");
// httpResponse.setHeader("Access-Control-Allow-Headers", httpRequest.getHeader("Access-Control-Request-Headers"));
// httpResponse.setStatus(HttpStatus.OK.value());
// return false;
// }
// return super.preHandle(request, response);
// }
@Override @Override
protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) { protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) {
@ -41,7 +61,7 @@ public class CustomAccessControlFilter extends AccessControlFilter {
@Override @Override
protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException { protected boolean onAccessDenied(ServletRequest servletRequest, ServletResponse servletResponse) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletRequest request = (HttpServletRequest) servletRequest;
try { // try {
Subject subject = getSubject(servletRequest, servletResponse); Subject subject = getSubject(servletRequest, servletResponse);
System.out.println(subject.isAuthenticated() + ""); System.out.println(subject.isAuthenticated() + "");
System.out.println(HttpContextUtils.isAjaxRequest(request)); System.out.println(HttpContextUtils.isAjaxRequest(request));
@ -49,16 +69,19 @@ public class CustomAccessControlFilter extends AccessControlFilter {
log.info(request.getRequestURL().toString()); log.info(request.getRequestURL().toString());
//从header中获取token //从header中获取token
String token = request.getHeader(Constant.ACCESS_TOKEN); String token = request.getHeader(Constant.ACCESS_TOKEN);
System.out.println("token===============" + token);
//如果header中不存在token,则从参数中获取token //如果header中不存在token,则从参数中获取token
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
token = request.getParameter(Constant.ACCESS_TOKEN); token = request.getParameter(Constant.ACCESS_TOKEN);
} }
if (StringUtils.isEmpty(token)) { if (StringUtils.isEmpty(token)) {
throw new BusinessException(BaseResponseCode.TOKEN_ERROR); request.setAttribute("filterError", new BusinessException(BaseResponseCode.TOKEN_ERROR));
// 指定处理该请求的处理器
request.getRequestDispatcher(Constant.ERROR_CONTROLLER_PATH).forward(request, servletResponse);
} }
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(token, token); UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(token, token);
getSubject(servletRequest, servletResponse).login(usernamePasswordToken); getSubject(servletRequest, servletResponse).login(usernamePasswordToken);
} catch (BusinessException exception) { /*} catch (BusinessException exception) {
if (HttpContextUtils.isAjaxRequest(request)) { if (HttpContextUtils.isAjaxRequest(request)) {
customResponse(exception.getBaseResponseCode().getCode(), exception.getMessage(), servletResponse); customResponse(exception.getBaseResponseCode().getCode(), exception.getMessage(), servletResponse);
} else if (exception.getBaseResponseCode().getCode() == BaseResponseCode.TOKEN_ERROR.getCode()) { } else if (exception.getBaseResponseCode().getCode() == BaseResponseCode.TOKEN_ERROR.getCode()) {
@ -93,7 +116,7 @@ public class CustomAccessControlFilter extends AccessControlFilter {
servletRequest.getRequestDispatcher("/index/500").forward(servletRequest, servletResponse); servletRequest.getRequestDispatcher("/index/500").forward(servletRequest, servletResponse);
} }
return false; return false;
} }*/
return true; return true;
} }

@ -1,7 +1,7 @@
/*
package com.huoran.iasf.common.shiro; package com.huoran.iasf.common.shiro;
import com.huoran.iasf.common.config.FileUploadProperties; import com.huoran.iasf.common.config.FileUploadProperties;
import com.huoran.iasf.common.filter.AuthFilter;
import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
@ -9,20 +9,21 @@ import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.Filter; import javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
*/
/** /**
* ShiroConfig * ShiroConfig
* *
* @author cheney * @author cheney
* @version V1.0 * @version V1.0
* @date 2022年7月28日 * @date 2022年7月28日*/
*//*
@Configuration @Configuration
@EnableConfigurationProperties(FileUploadProperties.class) @EnableConfigurationProperties(FileUploadProperties.class)
@ -36,9 +37,8 @@ public class ShiroConfig {
return new CustomHashedCredentialsMatcher(); return new CustomHashedCredentialsMatcher();
} }
*/
/** /**
* 创建realm*//* * 创建realm*/
@Bean @Bean
public CustomRealm customRealm() { public CustomRealm customRealm() {
@ -56,7 +56,7 @@ public class ShiroConfig {
} }
@Bean /*@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
//整个shiro执行过程: 过滤器、认证、授权 //整个shiro执行过程: 过滤器、认证、授权
@ -70,8 +70,7 @@ public class ShiroConfig {
shiroFilterFactoryBean.setFilters(filtersMap); shiroFilterFactoryBean.setFilters(filtersMap);
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// 配置不会被拦截的链接 顺序判断 // 配置不会被拦截的链接 顺序判断
*/ *//* filterChainDefinitionMap.put("/sys/user/login", "anon");
/*filterChainDefinitionMap.put("/sys/user/login", "anon");
filterChainDefinitionMap.put("/sys/user/token", "anon"); filterChainDefinitionMap.put("/sys/user/token", "anon");
filterChainDefinitionMap.put("/sys/getVerify", "anon"); filterChainDefinitionMap.put("/sys/getVerify", "anon");
filterChainDefinitionMap.put("/sys/checkVerify", "anon"); filterChainDefinitionMap.put("/sys/checkVerify", "anon");
@ -94,22 +93,84 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/layui/**", "anon"); filterChainDefinitionMap.put("/layui/**", "anon");
filterChainDefinitionMap.put("/css/**", "anon"); filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/layui-ext/**", "anon"); filterChainDefinitionMap.put("/layui-ext/**", "anon");
filterChainDefinitionMap.put("/app/api/**", "anon");*//* filterChainDefinitionMap.put("/app/api/**", "anon");
filterChainDefinitionMap.put("/sys/getVerify", "anon"); filterChainDefinitionMap.put("/sys/getVerify", "anon");
filterChainDefinitionMap.put("/sys/user/login", "anon"); filterChainDefinitionMap.put("/sys/user/login", "anon");*//*
filterChainDefinitionMap.put("/**", "token,authc"); filterChainDefinitionMap.put("/**", "token,authc");
shiroFilterFactoryBean.setLoginUrl("/login"); shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean; return shiroFilterFactoryBean;
}*/
@Bean
public ShiroFilterFactoryBean shirFilter() {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSecurityManager(securityManager());
Map<String, Filter> filterMap = new HashMap<>();
// 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 :这是一个坑呢,一不小心代码就不好使了;
// ① authc:所有url都必须认证通过才可以访问; ② anon:所有url都都可以匿名访问
//过滤器1
filterMap.put("token", new AuthFilter());
//过滤器2
//用来校验token
filterMap.put("authc", new CustomAccessControlFilter());
shiroFilterFactoryBean.setFilters(filterMap);
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
// 配置不会被拦截的链接 顺序判断
filterChainDefinitionMap.put("/sys/user/login", "anon");
filterChainDefinitionMap.put("/sys/user/token", "anon");
filterChainDefinitionMap.put("/sys/getVerify", "anon");
filterChainDefinitionMap.put("/sys/checkVerify", "anon");
filterChainDefinitionMap.put("/sysFiles/preview/**", "anon");
filterChainDefinitionMap.put("/sysContent/findById", "anon");
filterChainDefinitionMap.put("/sysColumn/findById", "anon");
filterChainDefinitionMap.put("/sysContent/articlePreview", "anon");
filterChainDefinitionMap.put("/sysContent/newlyPublishedArticles", "anon");
filterChainDefinitionMap.put("/sysColumn/listWithTreeMenuVisible", "anon");
filterChainDefinitionMap.put("/sysContent/hotContent", "anon");
filterChainDefinitionMap.put("/sysColumn/listWithTree", "anon");
filterChainDefinitionMap.put("/sysColumnLongPage/getLongPageInformation", "anon");
filterChainDefinitionMap.put("/favicon.ico", "anon");
filterChainDefinitionMap.put("/sysColumn/queryArticlesByColumnType", "anon");
filterChainDefinitionMap.put("/content/label/queryAllArticleSubjectTags", "anon");
filterChainDefinitionMap.put("/sysColumn/oneLevelChecksThemAll", "anon");
filterChainDefinitionMap.put("/sysColumn/getTheFullArticleByColumn", "anon");
filterChainDefinitionMap.put("/sys/exportFailure", "anon");
/*filterChainDefinitionMap.put("/index/**", "anon");
filterChainDefinitionMap.put("/doc.html", "anon");
filterChainDefinitionMap.put("/swagger-resources/**", "anon");
filterChainDefinitionMap.put("/v2/api-docs", "anon");
filterChainDefinitionMap.put("/v2/api-docs-ext", "anon");
filterChainDefinitionMap.put("*.html", "anon");
filterChainDefinitionMap.put("/static/**", "anon");
filterChainDefinitionMap.put("/webjars/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/favicon.ico", "anon");
filterChainDefinitionMap.put("/captcha.jpg", "anon");
filterChainDefinitionMap.put("/csrf", "anon");
//文件上传可直接访问
filterChainDefinitionMap.put(fileUploadProperties.getAccessUrl(), "anon");
filterChainDefinitionMap.put("/images/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/layui/**", "anon");
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/layui-ext/**", "anon");
filterChainDefinitionMap.put("/app/api/**", "anon");*/
// 所有请求经过过滤器
filterChainDefinitionMap.put("/**", "authc,token");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
} }
*/
/** /**
* 开启shiro aop注解支持. * 开启shiro aop注解支持.
* 使用代理方式;所以需要开启代码支持; * 使用代理方式;所以需要开启代码支持;
* *
* @return org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor*//* * @return org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor*/
@Bean @Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
@ -121,4 +182,3 @@ public class ShiroConfig {
} }
*/

@ -77,4 +77,9 @@ public class Constant {
public static final Integer NAVIGATION_MENU_VISIBLE = 0; public static final Integer NAVIGATION_MENU_VISIBLE = 0;
public static final Integer THE_NAVIGATION_MENU_IS_NOT_VISIBLE = 1; public static final Integer THE_NAVIGATION_MENU_IS_NOT_VISIBLE = 1;
/**
* 异常处理 controller request url
*/
public static final String ERROR_CONTROLLER_PATH = "/error/throw";
} }

@ -71,7 +71,7 @@ public class DeptController {
@GetMapping("/dept/{id}") @GetMapping("/dept/{id}")
@ApiOperation(value = "查询组织详情接口") @ApiOperation(value = "查询组织详情接口")
@LogAnnotation(title = "机构管理", action = "查询组织详情") @LogAnnotation(title = "机构管理", action = "查询组织详情")
@RequiresPermissions("sys:dept:detail") // @RequiresPermissions("sys:dept:detail")
public R detailInfo(@PathVariable("id") String id) { public R detailInfo(@PathVariable("id") String id) {
return R.success(deptService.getById(id)); return R.success(deptService.getById(id));
} }
@ -79,7 +79,7 @@ public class DeptController {
@GetMapping("/dept/tree") @GetMapping("/dept/tree")
@ApiOperation(value = "树型组织列表接口",response = DeptRespNodeVO.class) @ApiOperation(value = "树型组织列表接口",response = DeptRespNodeVO.class)
@LogAnnotation(title = "部门管理", action = "树型组织列表") @LogAnnotation(title = "部门管理", action = "树型组织列表")
@RequiresPermissions(value = {"sys:user:list", "sys:user:update", "sys:user:add", "sys:dept:add", "sys:dept:update"}, logical = Logical.OR) // @RequiresPermissions(value = {"sys:user:list", "sys:user:update", "sys:user:add", "sys:dept:add", "sys:dept:update"}, logical = Logical.OR)
public R getTree( public R getTree(
@ApiParam(name = "deptId", value = "部门id",required = false) @ApiParam(name = "deptId", value = "部门id",required = false)
@RequestParam(required = false) String deptId) { @RequestParam(required = false) String deptId) {

@ -0,0 +1,24 @@
package com.huoran.iasf.controller;
import com.huoran.iasf.common.exception.BusinessException;
import com.huoran.iasf.common.utils.Constant;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
/**
* 过滤器异常控制器
*/
@RestController
public class ExceptionController {
@RequestMapping(Constant.ERROR_CONTROLLER_PATH)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public void handleException(HttpServletRequest request){
throw (BusinessException) request.getAttribute("filterError");
}
}

@ -53,7 +53,7 @@ public class PermissionController {
@GetMapping("/permission/tree/all") @GetMapping("/permission/tree/all")
@ApiOperation(value = "获取所有目录菜单树接口") @ApiOperation(value = "获取所有目录菜单树接口")
@LogAnnotation(title = "菜单权限管理", action = "获取所有目录菜单树") @LogAnnotation(title = "菜单权限管理", action = "获取所有目录菜单树")
@RequiresPermissions(value = {"sys:role:update", "sys:role:add"}, logical = Logical.OR) // @RequiresPermissions(value = {"sys:role:update", "sys:role:add"}, logical = Logical.OR)
public R getAllPermissionTree() { public R getAllPermissionTree() {
return R.success(permissionService.selectAllByTree()); return R.success(permissionService.selectAllByTree());
} }

@ -94,7 +94,7 @@ public class RoleController {
@GetMapping("/role/{id}") @GetMapping("/role/{id}")
@ApiOperation(value = "查询角色详情接口") @ApiOperation(value = "查询角色详情接口")
@LogAnnotation(title = "角色管理", action = "查询角色详情") @LogAnnotation(title = "角色管理", action = "查询角色详情")
@RequiresPermissions("sys:role:detail") // @RequiresPermissions("sys:role:detail")
public R detailInfo(@PathVariable("id") String id) { public R detailInfo(@PathVariable("id") String id) {
// return R.success(roleService.detailInfo(id)); // return R.success(roleService.detailInfo(id));
SysRole role = roleService.getById(id); SysRole role = roleService.getById(id);

@ -33,7 +33,7 @@ public class RolePermissionController {
@PostMapping("/role/permission") @PostMapping("/role/permission")
@ApiOperation(value = "修改或者新增角色菜单权限接口") @ApiOperation(value = "修改或者新增角色菜单权限接口")
@LogAnnotation(title = "角色和菜单关联接口", action = "修改或者新增角色菜单权限") @LogAnnotation(title = "角色和菜单关联接口", action = "修改或者新增角色菜单权限")
@RequiresPermissions(value = {"sys:role:update", "sys:role:add"}, logical = Logical.OR) // @RequiresPermissions(value = {"sys:role:update", "sys:role:add"}, logical = Logical.OR)
public R operationRolePermission(@RequestBody @Valid RolePermissionOperationReqVO vo) { public R operationRolePermission(@RequestBody @Valid RolePermissionOperationReqVO vo) {
rolePermissionService.addRolePermission(vo); rolePermissionService.addRolePermission(vo);
return R.success(); return R.success();

@ -35,9 +35,9 @@ public class SiteController {
private SiteService siteService; private SiteService siteService;
@PostMapping("/add") @PostMapping("/add")
@ApiOperation(value = "新增站点") // @ApiOperation(value = "新增站点")
@LogAnnotation(title = "站点管理", action = "新增站点") // @LogAnnotation(title = "站点管理", action = "新增站点")
@RequiresPermissions("sys:site:add") // @RequiresPermissions("sys:site:add")
public R addUserGroup(@RequestBody Site site) { public R addUserGroup(@RequestBody Site site) {
Site one = siteService.getOne(new QueryWrapper<Site>(). Site one = siteService.getOne(new QueryWrapper<Site>().
eq("site_name", site.getSiteName())); eq("site_name", site.getSiteName()));
@ -49,18 +49,18 @@ public class SiteController {
} }
@DeleteMapping("/delete/{id}") @DeleteMapping("/delete/{id}")
@ApiOperation(value = "删除站点") // @ApiOperation(value = "删除站点")
@LogAnnotation(title = "站点管理", action = "删除站点") // @LogAnnotation(title = "站点管理", action = "删除站点")
@RequiresPermissions("sys:site:deleted") // @RequiresPermissions("sys:site:deleted")
public R deleted(@PathVariable("id") Integer id) { public R deleted(@PathVariable("id") Integer id) {
siteService.removeById(id); siteService.removeById(id);
return R.success(); return R.success();
} }
@PutMapping("/update") @PutMapping("/update")
@ApiOperation(value = "更新站点") // @ApiOperation(value = "更新站点")
@LogAnnotation(title = "站点管理", action = "更新站点") // @LogAnnotation(title = "站点管理", action = "更新站点")
@RequiresPermissions("sys:site:update") // @RequiresPermissions("sys:site:update")
public R updateUserGroup(@RequestBody Site site) { public R updateUserGroup(@RequestBody Site site) {
if (StringUtils.isEmpty(site.getId())) { if (StringUtils.isEmpty(site.getId())) {
return R.fail("id不能为空"); return R.fail("id不能为空");

@ -1,4 +1,3 @@
/*
package com.huoran.iasf.controller; package com.huoran.iasf.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -16,14 +15,13 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
*/
/** /**
* 系统操作日志 * 系统操作日志
* *
* @author cheney * @author cheney
* @version V1.0 * @version V1.0
* @date 2022年7月28日 * @date 2022年7月28日
*//* */
@RequestMapping("/sys") @RequestMapping("/sys")
@Api(tags = "系统模块-系统操作日志管理") @Api(tags = "系统模块-系统操作日志管理")
@ -35,7 +33,7 @@ public class SysLogController {
@PostMapping("/logs") @PostMapping("/logs")
@ApiOperation(value = "分页查询系统操作日志接口") @ApiOperation(value = "分页查询系统操作日志接口")
@LogAnnotation(title = "系统操作日志管理", action = "分页查询系统操作日志") @LogAnnotation(title = "系统操作日志管理", action = "分页查询系统操作日志")
@RequiresPermissions("sys:log:list") // @RequiresPermissions("sys:log:list")
public R pageInfo(@RequestBody SysLog vo) { public R pageInfo(@RequestBody SysLog vo) {
LambdaQueryWrapper<SysLog> queryWrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysLog> queryWrapper = Wrappers.lambdaQuery();
if (!StringUtils.isEmpty(vo.getUsername())) { if (!StringUtils.isEmpty(vo.getUsername())) {
@ -57,10 +55,9 @@ public class SysLogController {
@DeleteMapping("/logs") @DeleteMapping("/logs")
@ApiOperation(value = "删除日志接口") @ApiOperation(value = "删除日志接口")
@LogAnnotation(title = "系统操作日志管理", action = "删除系统操作日志") @LogAnnotation(title = "系统操作日志管理", action = "删除系统操作日志")
@RequiresPermissions("sys:log:deleted") // @RequiresPermissions("sys:log:deleted")
public R deleted(@RequestBody List<String> logIds) { public R deleted(@RequestBody List<String> logIds) {
logService.removeByIds(logIds); logService.removeByIds(logIds);
return R.success(); return R.success();
} }
} }
*/

@ -64,7 +64,7 @@ public class UserController {
@PutMapping("/user") @PutMapping("/user")
@ApiOperation(value = "更新用户信息接口") @ApiOperation(value = "更新用户信息接口")
@LogAnnotation(title = "用户管理", action = "更新用户信息") @LogAnnotation(title = "用户管理", action = "更新用户信息")
@RequiresPermissions("sys:user:update") // @RequiresPermissions("sys:user:update")
public R updateUserInfo(@RequestBody SysUser vo) { public R updateUserInfo(@RequestBody SysUser vo) {
if (StringUtils.isEmpty(vo.getId())) { if (StringUtils.isEmpty(vo.getId())) {
return R.fail("id不能为空"); return R.fail("id不能为空");
@ -76,7 +76,7 @@ public class UserController {
@GetMapping("/user/{id}") @GetMapping("/user/{id}")
@ApiOperation(value = "查询用户详情接口") @ApiOperation(value = "查询用户详情接口")
@LogAnnotation(title = "用户管理", action = "查询用户详情") @LogAnnotation(title = "用户管理", action = "查询用户详情")
@RequiresPermissions("sys:user:detail") // @RequiresPermissions("sys:user:detail")
public R detailInfo(@PathVariable("id") String id) { public R detailInfo(@PathVariable("id") String id) {
UserListResp userResp = userService.detailInfo(id); UserListResp userResp = userService.detailInfo(id);
return R.success(userResp); return R.success(userResp);
@ -84,7 +84,7 @@ public class UserController {
@PostMapping("/users") @PostMapping("/users")
@ApiOperation(value = "分页获取用户列表接口") @ApiOperation(value = "分页获取用户列表接口")
@RequiresPermissions("sys:user:list") // @RequiresPermissions("sys:user:list")
@LogAnnotation(title = "用户管理", action = "分页获取用户列表") @LogAnnotation(title = "用户管理", action = "分页获取用户列表")
public R pageInfo(@RequestBody UserListReq userListReq) { public R pageInfo(@RequestBody UserListReq userListReq) {
return userService.pageInfo(userListReq); return userService.pageInfo(userListReq);
@ -92,7 +92,7 @@ public class UserController {
@PostMapping("/user") @PostMapping("/user")
@ApiOperation(value = "新增用户接口") @ApiOperation(value = "新增用户接口")
@RequiresPermissions("sys:user:add") // @RequiresPermissions("sys:user:add")
@LogAnnotation(title = "用户管理", action = "新增用户") @LogAnnotation(title = "用户管理", action = "新增用户")
public R addUser(@RequestBody @Valid SysUser vo) { public R addUser(@RequestBody @Valid SysUser vo) {
userService.addUser(vo); userService.addUser(vo);
@ -171,7 +171,7 @@ public class UserController {
@DeleteMapping("/user") @DeleteMapping("/user")
@ApiOperation(value = "删除用户接口") @ApiOperation(value = "删除用户接口")
@LogAnnotation(title = "用户管理", action = "删除用户") @LogAnnotation(title = "用户管理", action = "删除用户")
@RequiresPermissions("sys:user:deleted") // @RequiresPermissions("sys:user:deleted")
public R deletedUser(@RequestBody @ApiParam(value = "用户id集合") List<Integer> userIds) { public R deletedUser(@RequestBody @ApiParam(value = "用户id集合") List<Integer> userIds) {
//删除用户, 删除redis的绑定的角色跟权限 //删除用户, 删除redis的绑定的角色跟权限
httpSessionService.abortUserByUserIds(userIds); httpSessionService.abortUserByUserIds(userIds);

@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
* @since 2022-08-15 * @since 2022-08-15
*/ */
@RestController @RestController
@RequestMapping("//user-dept") @RequestMapping("/userDept")
public class UserDeptController { public class UserDeptController {
} }

@ -13,7 +13,7 @@ import java.util.Date;
* session管理器 * session管理器
* @author cheney * @author cheney
* @version V1.0 * @version V1.0
* @date 2020年5月11日 * @date 2022年5月11日
*/ */
@Service @Service
public class HttpApiSessionService { public class HttpApiSessionService {
@ -25,7 +25,7 @@ public class HttpApiSessionService {
public static final String SUBJECT = "HuoRan_SUBJECT"; public static final String SUBJECT = "HuoRan_SUBJECT";
public static final long EXPIRE = 1000 * 60 * 60 * 24 * 2; //过期时间,毫秒,一天 public static final long EXPIRE = 1000 * 60 * 60 * 24; //过期时间,毫秒,一天
//秘钥 //秘钥
public static final String APP_SECRET = "HuoRan_SYMMETRIC_ENCRYPTION_HS256"; public static final String APP_SECRET = "HuoRan_SYMMETRIC_ENCRYPTION_HS256";
@ -38,7 +38,7 @@ public class HttpApiSessionService {
* @param userId username * @param userId username
* @return token * @return token
*/ */
public String geneJsonWebToken(String userId, String userName) { public String generateToken(Integer userId, String userName) {
String token = Jwts.builder().setSubject(SUBJECT) String token = Jwts.builder().setSubject(SUBJECT)
.claim(USER_ID_KEY, userId) .claim(USER_ID_KEY, userId)
.claim(USER_USERNAME_KEY, userName) .claim(USER_USERNAME_KEY, userName)

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.huoran.iasf.common.utils.Constant; import com.huoran.iasf.common.utils.Constant;
import com.huoran.iasf.entity.SysUser; import com.huoran.iasf.entity.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -28,8 +29,7 @@ public class HttpSessionService {
private RedisService redisService; private RedisService redisService;
@Resource @Resource
private UserRoleService userRoleService; private UserRoleService userRoleService;
@Resource
private RolePermissionService rolePermissionService;
@Resource @Resource
private HttpServletRequest request; private HttpServletRequest request;
@Resource @Resource
@ -45,12 +45,17 @@ public class HttpSessionService {
@Value("${spring.redis.key.prefix.permissionRefresh}") @Value("${spring.redis.key.prefix.permissionRefresh}")
private String redisPermissionRefreshKey; private String redisPermissionRefreshKey;
@Value("${spring.redis.key.expire.permissionRefresh}") @Value("${spring.redis.key.expire.permissionRefresh}")
private Long redisPermissionRefreshExpire; private Long redisPermissionRefreshExpire;
@Autowired
private HttpApiSessionService sessionService;
public String createTokenAndUser(SysUser user, List<String> roles, Set<String> permissions) { public String createTokenAndUser(SysUser user, List<String> roles, Set<String> permissions) {
String token = sessionService.generateToken(user.getId(), user.getUsername());
//方便根据id找到redis的key, 修改密码/退出登陆 方便使用 //方便根据id找到redis的key, 修改密码/退出登陆 方便使用
String token = getRandomToken() + "#" + user.getId(); // String token = getRandomToken() + "#" + user.getId();
JSONObject sessionInfo = new JSONObject(); JSONObject sessionInfo = new JSONObject();
sessionInfo.put(Constant.USERID_KEY, user.getId()); sessionInfo.put(Constant.USERID_KEY, user.getId());
sessionInfo.put(Constant.USERNAME_KEY, user.getUsername()); sessionInfo.put(Constant.USERNAME_KEY, user.getUsername());

@ -194,7 +194,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
} }
if (StringUtils.isNotEmpty(vo.getPhone())) { if (StringUtils.isNotEmpty(vo.getPhone())) {
vo.setEmail(vo.getPhone()); vo.setPhone(vo.getPhone());
} }
//更新部门 //更新部门
@ -239,7 +239,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
public R resetPwd(String userId) { public R resetPwd(String userId) {
SysUser sysUser = baseMapper.selectById(userId); SysUser sysUser = baseMapper.selectById(userId);
sysUser.setSalt(PasswordUtils.getSalt()); sysUser.setSalt(PasswordUtils.getSalt());
String encode = PasswordUtils.encode("1122aa", sysUser.getSalt()); String encode = PasswordUtils.encode("111aaa", sysUser.getSalt());
sysUser.setPassword(encode); sysUser.setPassword(encode);
int update = baseMapper.updateById(sysUser); int update = baseMapper.updateById(sysUser);
return update>0 ? R.success("重置成功") : R.fail("重置失败"); return update>0 ? R.success("重置成功") : R.fail("重置失败");
@ -261,7 +261,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
public void addUser(SysUser vo) { public void addUser(SysUser vo) {
vo.setSalt(PasswordUtils.getSalt()); vo.setSalt(PasswordUtils.getSalt());
String encode = PasswordUtils.encode("1122aa", vo.getSalt()); String encode = PasswordUtils.encode("111aaa", vo.getSalt());
vo.setPassword(encode); vo.setPassword(encode);
vo.setStatus(1); vo.setStatus(1);
vo.setCreateWhere(1); vo.setCreateWhere(1);
@ -380,7 +380,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
errMsg += countNum + "必填项:(姓名不能为空)"; errMsg += countNum + "必填项:(姓名不能为空)";
ret = false; ret = false;
} else { } else {
vo1.setUserName(realName); vo1.setRealName(realName);
} }
//检验账号 //检验账号
if ("".equals(username)) { if ("".equals(username)) {
@ -471,6 +471,11 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
int insert = userGroupMapper.insert(userGroup); int insert = userGroupMapper.insert(userGroup);
groupId=userGroup.getId(); groupId=userGroup.getId();
} }
}else {
++countNum;
vo1.setGroupName(groupName + " *必填项:(用户组不能为空)");
errMsg += countNum + " *必填项:(用户组不能为空)";
ret = false;
} }
if (!"".equals(getPhone)) { if (!"".equals(getPhone)) {
@ -600,7 +605,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
if (0==usernameId){ if (0==usernameId){
SysUser vo = new SysUser(); SysUser vo = new SysUser();
vo.setSalt(PasswordUtils.getSalt()); vo.setSalt(PasswordUtils.getSalt());
String encode = PasswordUtils.encode("1122aa", vo.getSalt()); String encode = PasswordUtils.encode("111aaa", vo.getSalt());
vo.setRealName(realName); vo.setRealName(realName);
vo.setPhone(getPhone); vo.setPhone(getPhone);
vo.setJobNumber(jobNumber); vo.setJobNumber(jobNumber);

@ -1,2 +0,0 @@
whiteList=/iasf/sys/user/login,\
/iasf/sys/exportFailure
Loading…
Cancel
Save