Commit 26fc5718 authored by fshenye's avatar fshenye

1. 添加测试环境配置文件test

2. 重要操作添加日志注解
3. 主要接口添加权限限制
parent d5d42ded
package cn.sh.stc.sict.cloud.auth;
import cn.sh.stc.sict.cloud.common.security.annotation.EnableSictFeignClients;
import cn.sh.stc.sict.cloud.common.swagger.annotation.EnableSictSwagger2;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
/**
* @author F_xh
*/
@EnableSictSwagger2
@SpringCloudApplication
@EnableSictFeignClients
public class SictAuthApplication {
......
......@@ -50,10 +50,13 @@ public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
.and()
.authorizeRequests()
.antMatchers(
"/token/**",
"/token/**",
"/v2/api-docs",
"/webjars/**",
"/swagger-resources/**",
"/test/**",
"/actuator/**",
"/mobile/**").permitAll()
"/actuator/**",
"/mobile/**").permitAll()
.anyRequest().authenticated()
.and().csrf().disable()
.apply(mobileSecurityConfigurer());
......
......@@ -7,10 +7,14 @@ import cn.sh.stc.sict.cloud.common.core.constant.PaginationConstants;
import cn.sh.stc.sict.cloud.common.core.constant.RedisCacheConstant;
import cn.sh.stc.sict.cloud.common.core.constant.SecurityConstants;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.security.util.SysLogUtils;
import cn.sh.stc.sict.cloud.upms.feign.RemoteLogService;
import cn.sh.stc.sict.cloud.upms.model.SysLog;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.sh.stc.sict.cloud.common.security.annotation.Inner;
import cn.sh.stc.sict.cloud.common.security.service.SictUser;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.CacheManager;
import org.springframework.data.redis.core.ConvertingCursor;
import org.springframework.data.redis.core.Cursor;
......@@ -26,6 +30,7 @@ import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -35,6 +40,7 @@ import java.util.Map;
* @Author
* @Date
*/
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/token")
......@@ -44,6 +50,7 @@ public class SictTokenEndpoint {
private final TokenStore tokenStore;
private final RedisTemplate redisTemplate;
private final CacheManager cacheManager;
private final RemoteLogService remoteLogService;
/**
* 认证页面
......@@ -61,7 +68,8 @@ public class SictTokenEndpoint {
* @param authHeader Authorization
*/
@DeleteMapping("/logout")
public R logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
public R logout(HttpServletRequest request,
@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
if (StrUtil.isBlank(authHeader)) {
return R.builder()
.code(Constant.BYTE_NO)
......@@ -79,10 +87,23 @@ public class SictTokenEndpoint {
}
OAuth2Authentication auth2Authentication = tokenStore.readAuthentication(accessToken);
SictUser user = (SictUser) cacheManager.getCache(RedisCacheConstant.USER_DETAILS).get(auth2Authentication.getName()).get();
String username = auth2Authentication.getName();
SictUser user = (SictUser) cacheManager.getCache(RedisCacheConstant.USER_DETAILS).get(username).get();
cacheManager.getCache(RedisCacheConstant.USER_DETAILS)
.evict(auth2Authentication.getName());
.evict(username);
tokenStore.removeAccessToken(accessToken);
SysLog sysLog = SysLogUtils.getSysLog(request, username);
sysLog.setTitle(username + "-用户登出");
sysLog.setParams(user.getName());
sysLog.setServiceId(auth2Authentication.getOAuth2Request().getClientId());
// 保存退出的token
String token = request.getHeader(HttpHeaders.AUTHORIZATION);
sysLog.setParams(token);
remoteLogService.saveLog(sysLog, SecurityConstants.FROM_IN);
log.info("用户:{} 退出成功, token:{} 已注销", username, token);
return new R<>(Boolean.TRUE);
}
......
server:
port: 12254
spring:
application:
name: @artifactId@
main:
allow-bean-definition-overriding: true
# nacos
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
namespace: eb001e6c-9c22-421f-8f36-ed92821014d8
config:
namespace: eb001e6c-9c22-421f-8f36-ed92821014d8
file-extension: yml
shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
......@@ -63,7 +63,7 @@
<appender-ref ref="error"/>
</logger>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="DEBUG">
<root level="ERROR">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
</root>
......
......@@ -26,7 +26,7 @@ public class GlobalCorsConfig {
*/
private static final String ALLOWED_HEADERS = "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN,token,username,client,access-token";
private static final String ALLOWED_METHODS = "*";
private static final String ALLOWED_ORIGIN = "*";
private static final String ALLOWED_ORIGIN = "https://inno.sh-sict.com/, https://hy.hpwjsns.org.cn/";
private static final String ALLOWED_Expose = "*";
private static final String MAX_AGE = "18000L";
......
......@@ -54,7 +54,7 @@ public class SictFeignClientInterceptor extends OAuth2FeignRequestInterceptor {
boolean isIngore = false;
if (CollectionUtil.isNotEmpty(permitAllUrlProperties.getIgnoreUrls())) {
for (String ingoreUrl : permitAllUrlProperties.getIgnoreUrls()) {
if(template.url().startsWith(ingoreUrl.replace("*", ""))){
if(template.url().startsWith(ingoreUrl.replace("/**", ""))){
isIngore = true;
break;
}
......
server:
port: 12998
spring:
application:
name: @artifactId@
# nacos
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
namespace: eb001e6c-9c22-421f-8f36-ed92821014d8
config:
namespace: eb001e6c-9c22-421f-8f36-ed92821014d8
file-extension: yml
shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
profiles:
active: dev
logging:
config: classpath:logback-spring.xml
file:
name: ../logs/${spring.application.name}/console.log
......@@ -63,7 +63,7 @@
<appender-ref ref="error"/>
</logger>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="INFO">
<root level="ERROR">
<appender-ref ref="console"/>
<appender-ref ref="debug"/>
</root>
......
package cn.sh.stc.sict.cloud.upms.controller.feign;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.upms.model.SysLog;
import cn.sh.stc.sict.cloud.upms.service.SysLogService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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;
/**
* 系统日志
*
* @author F_xh。
* @date 2020-12-27 11:34:55
*/
@Slf4j
@RestController
@RequestMapping("/feign/log")
@AllArgsConstructor
public class LogFeignController {
private final SysLogService sysLogService;
@PostMapping("/save")
private R<Boolean> saveLog(@RequestBody SysLog sysLog){
sysLogService.save(sysLog);
return new R(true);
}
}
package cn.sh.stc.sict.cloud.upms.controller.web;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.upms.service.HpRoleMenuService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.sh.stc.sict.cloud.common.core.util.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -61,8 +63,10 @@ public class HpMenuController {
* @param hpMenu 系统菜单表
* @return R
*/
@SysLog
@ApiOperation("新增系统菜单表")
@PostMapping
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
public R save(@RequestBody HpMenu hpMenu) {
hpMenuService.saveOrUpdate(hpMenu);
return new R<>();
......@@ -73,8 +77,10 @@ public class HpMenuController {
*
* @return R
*/
@SysLog
@ApiOperation("删除系统菜单表")
@DeleteMapping("/{menuId}")
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
public R removeById(@PathVariable Long menuId) {
if (hpRoleMenuService.exist(menuId)) {
return new R().error("不可删除!");
......
package cn.sh.stc.sict.cloud.upms.controller.web;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.upms.dto.RoleDTO;
import cn.sh.stc.sict.cloud.upms.model.HpMenu;
import cn.sh.stc.sict.cloud.upms.model.HpRole;
......@@ -14,8 +15,10 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
......@@ -70,15 +73,19 @@ public class HpRoleController {
return new R<>(dto);
}
@SysLog
@ApiOperation("新增/修改系统角色")
@PostMapping
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
public R save(@RequestBody RoleDTO dto) {
hpRoleService.saveDto(dto);
return new R<>();
}
@SysLog
@ApiOperation("删除系统角色表")
@DeleteMapping("/{id}")
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
public R removeById(@PathVariable Long id) {
// 判断是否可删除
if(hpUserRoleService.exist(id)){
......
......@@ -3,6 +3,7 @@ package cn.sh.stc.sict.cloud.upms.controller.web;
import cn.hutool.core.util.StrUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.cloud.upms.dto.UserDTO;
......@@ -17,6 +18,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cn.sh.stc.sict.cloud.common.core.util.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.transaction.annotation.Transactional;
......@@ -62,8 +64,10 @@ public class SysUserBaseController {
return new R<>(sysUserBaseService.page(page, Wrappers.query(sysUserBase)));
}
@SysLog
@ApiOperation("新增/修改用户")
@PostMapping
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
public R save(@RequestBody SysUserBase userBase) {
if (NumberUtil.isNullOrZero(userBase.getId())) {
if(StrUtil.isBlank(userBase.getUserName())){
......@@ -114,8 +118,10 @@ public class SysUserBaseController {
}
@SysLog
@ApiOperation("设置用户角色信息")
@PostMapping("/role")
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
public R saveUserRole(@RequestBody UserDTO dto) {
if (NumberUtil.isNullOrZero(dto.getUser().getId())) {
return new R().error("用户id不可为空!");
......@@ -129,8 +135,10 @@ public class SysUserBaseController {
*
* @return R
*/
@SysLog
@ApiOperation("删除系统基础用户表")
@DeleteMapping("/{userId}")
@PreAuthorize("@pms.hasPermission('ROLE_admin')")
@Transactional(rollbackFor = Exception.class)
public R removeById(@PathVariable Long userId) {
hpUserRoleService.removeByUserId(userId);
......
package cn.sh.stc.sict.cloud.upms.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
......@@ -12,7 +14,9 @@ import cn.sh.stc.sict.cloud.common.core.util.SsbUtil;
import cn.sh.stc.sict.cloud.upms.dao.SysUserBaseMapper;
import cn.sh.stc.sict.cloud.upms.dto.UserDTO;
import cn.sh.stc.sict.cloud.upms.dto.UserInfo;
import cn.sh.stc.sict.cloud.upms.model.HpRole;
import cn.sh.stc.sict.cloud.upms.model.SysUserBase;
import cn.sh.stc.sict.cloud.upms.service.HpRoleService;
import cn.sh.stc.sict.cloud.upms.service.HpUserRoleService;
import cn.sh.stc.sict.cloud.upms.service.SysUserBaseService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
......@@ -27,6 +31,9 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service("sysUserBaseService")
@AllArgsConstructor
......@@ -35,6 +42,7 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
private final SysUserBaseMapper sysUserBaseMapper;
private WxMpService wxMpService;
private HpUserRoleService hpUserRoleService;
private HpRoleService hpRoleService;
private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
@Override
......@@ -47,6 +55,14 @@ public class SysUserBaseServiceImpl extends ServiceImpl<SysUserBaseMapper, SysUs
UserInfo info = new UserInfo();
info.setSysUserBase(user);
info.setOpenId(user.getOpenId());
List<HpRole> roleList = hpRoleService.listByUserId(user.getId());
if(CollUtil.isNotEmpty(roleList)){
// 设置角色列表 (ID)
List<String> roleIds = roleList.stream().map(HpRole::getRoleCode)
.collect(Collectors.toList());
info.setRoles(ArrayUtil.toArray(roleIds, String.class));
}
return info;
}
return null;
......
server:
port: 12256
spring:
application:
name: @artifactId@
main:
allow-bean-definition-overriding: true
# nacos
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
namespace: eb001e6c-9c22-421f-8f36-ed92821014d8
config:
namespace: eb001e6c-9c22-421f-8f36-ed92821014d8
file-extension: yml
shared-dataids: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
profiles:
active: dev
......@@ -16,7 +16,10 @@
<groupId>cn.sh.stc.sict</groupId>
<artifactId>cloud-common-data</artifactId>
</dependency>
<dependency>
<groupId>cn.sh.stc.sict</groupId>
<artifactId>cloud-common-log</artifactId>
</dependency>
<dependency>
<groupId>cn.sh.stc.sict</groupId>
<artifactId>cloud-common-minio</artifactId>
......
......@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.theme.hpgp.model.HpAppointmentEva;
......@@ -53,6 +54,7 @@ public class HpAppointmentEvaController {
return new R(page);
}
@SysLog
@ApiOperation("评价")
@PostMapping("/eva")
@Transactional(rollbackFor = Exception.class)
......
......@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.http.HttpRequest;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.theme.hpgp.vo.IntelligentAnswerVO;
......@@ -31,6 +32,7 @@ import java.util.Map;
public class HpGpIntelligentQAController {
private final static String CONTENT = "Content";
@SysLog
@ApiOperation("智能问答")
@PostMapping
public R<?> qa(String question) {
......
......@@ -2,6 +2,7 @@ package cn.sh.stc.sict.theme.hpgp.controller.mobile;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.theme.hpgp.model.HpgpLumbarAnswer;
......@@ -32,7 +33,8 @@ public class HpgpLumbarAnswerController {
return new R().success(this.hpgpLumbarAnswerService.page(page, new QueryWrapper<>(hpgpLumbarAnswer)));
}
@ApiOperation("新增")
@SysLog
@ApiOperation("腰椎问卷-新增")
@PostMapping
public R insert(@RequestBody HpgpLumbarAnswer lumbar) {
CurrentUser current = SecurityUtils.getCurrentUser();
......
......@@ -9,6 +9,7 @@ import cn.hutool.json.JSONUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.core.util.WebUtils;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.theme.hphy.constant.PatientConstant;
......@@ -47,6 +48,7 @@ public class AppointmentController {
return new R(cfg);
}
@SysLog
@ApiOperation("预约")
@PostMapping("/app")
public R appointment(@RequestBody OrderInfo order) throws Exception {
......@@ -153,6 +155,7 @@ public class AppointmentController {
return new R().error("预约失败!");
}
@SysLog
@ApiOperation("取消预约")
@PostMapping("/cancel/app")
public R cancelAppointment(@RequestBody CancelOrderInfo order) throws Exception {
......
......@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.http.HttpRequest;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
......@@ -27,6 +28,7 @@ import java.util.Map;
public class HpHyIntelligentQAController {
private final static String CONTENT = "Content";
@SysLog
@ApiOperation("智能问答")
@PostMapping
public R qa(String question) {
......
......@@ -7,6 +7,7 @@ import cn.hutool.json.JSONUtil;
import cn.sh.stc.sict.cloud.common.core.constant.Constant;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.theme.common.dto.SocketMsg;
import cn.sh.stc.sict.theme.handler.WebSocketServer;
......@@ -108,6 +109,7 @@ public class HphyEvaController {
*
* @return
*/
@SysLog
@ApiOperation("提交答案并获取下一题")
@PostMapping("/next")
@Transactional(rollbackFor = Exception.class)
......
......@@ -11,6 +11,7 @@ import cn.sh.stc.sict.cloud.common.core.dto.WDUserInfo;
import cn.sh.stc.sict.cloud.common.core.util.NumberUtil;
import cn.sh.stc.sict.cloud.common.core.util.R;
import cn.sh.stc.sict.cloud.common.core.util.SsbUtil;
import cn.sh.stc.sict.cloud.common.log.annotation.SysLog;
import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils;
import cn.sh.stc.sict.cloud.upms.dto.CurrentUser;
import cn.sh.stc.sict.theme.hphy.constant.PatientConstant;
......@@ -52,6 +53,7 @@ public class HphyPatientBaseController {
* @param patient
* @return
*/
@SysLog
@ApiOperation("注册")
@PostMapping("/register")
public R register(@RequestBody HphyPatientBase patient) {
......
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