feat(新增): 邮箱用户修改状态,安全框架修改,代码生成器部分修改
This commit is contained in:
parent
c57e1e98f5
commit
955cc4aa65
|
@ -1,30 +1,22 @@
|
||||||
import { http } from '@/api/service/request';
|
import { http } from '@/api/service/request';
|
||||||
import type { BaseResult, ResultTable } from '@/api/service/types';
|
import type { BaseResult, ResultTable } from '@/api/service/types';
|
||||||
|
|
||||||
/**
|
/** ${classDescription}---获取${classDescription}列表 */
|
||||||
* ${classDescription}---获取${classDescription}列表
|
|
||||||
*/
|
|
||||||
export const fetchGet${originalName}List = (data: any) => {
|
export const fetchGet${originalName}List = (data: any) => {
|
||||||
return http.request<BaseResult<ResultTable>>('get', `${lowercaseName}/get${originalName}List/${data.currentPage}/${data.pageSize}`, { params: data });
|
return http.request<BaseResult<ResultTable>>('get', `${lowercaseName}/get${originalName}List/${data.currentPage}/${data.pageSize}`, { params: data });
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/** ${classDescription}---添加${classDescription} */
|
||||||
* ${classDescription}---添加${classDescription}
|
|
||||||
*/
|
|
||||||
export const fetchAdd${originalName} = (data: any) => {
|
export const fetchAdd${originalName} = (data: any) => {
|
||||||
return http.request<BaseResult<object>>('post', '${lowercaseName}/add${originalName}', { data });
|
return http.request<BaseResult<object>>('post', '${lowercaseName}/add${originalName}', { data });
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/** ${classDescription}---更新${classDescription} */
|
||||||
* ${classDescription}---更新${classDescription}
|
|
||||||
*/
|
|
||||||
export const fetchUpdate${originalName} = (data: any) => {
|
export const fetchUpdate${originalName} = (data: any) => {
|
||||||
return http.request<BaseResult<object>>('put', '${lowercaseName}/update${originalName}', { data });
|
return http.request<BaseResult<object>>('put', '${lowercaseName}/update${originalName}', { data });
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/** ${classDescription}---删除${classDescription} */
|
||||||
* ${classDescription}---删除${classDescription}
|
|
||||||
*/
|
|
||||||
export const fetchDelete${originalName} = (data: any) => {
|
export const fetchDelete${originalName} = (data: any) => {
|
||||||
return http.request<BaseResult<object>>('delete', '${lowercaseName}/delete${originalName}', { data });
|
return http.request<BaseResult<object>>('delete', '${lowercaseName}/delete${originalName}', { data });
|
||||||
};
|
};
|
|
@ -101,7 +101,7 @@
|
||||||
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
|
<el-button :icon="useRenderIcon(EditPen)" :size="size" class="reset-margin" link type="primary" @click="onUpdate(row)"> {{ $t('modify') }} </el-button>
|
||||||
<el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd"> {{ $t('add_new') }} </el-button>
|
<el-button :icon="useRenderIcon(AddFill)" :size="size" class="reset-margin" link type="primary" @click="onAdd"> {{ $t('add_new') }} </el-button>
|
||||||
<!-- TODO 待完成 -->
|
<!-- TODO 待完成 -->
|
||||||
<el-popconfirm :title="`是否确认删除 ${row.typeName}数据`" @confirm="onDelete(row)">
|
<el-popconfirm :title="`${$t('delete')}${row.email}?`" @confirm="onDelete(row)">
|
||||||
<template #reference>
|
<template #reference>
|
||||||
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
|
<el-button :icon="useRenderIcon(Delete)" :size="size" class="reset-margin" link type="primary">
|
||||||
{{ $t('delete') }}
|
{{ $t('delete') }}
|
||||||
|
|
|
@ -32,9 +32,7 @@ export const use${originalName}Store = defineStore('${lowercaseName}Store', {
|
||||||
},
|
},
|
||||||
getters: {},
|
getters: {},
|
||||||
actions: {
|
actions: {
|
||||||
/**
|
/** 获取${classTitle} */
|
||||||
* * 获取${classTitle}
|
|
||||||
*/
|
|
||||||
async get${originalName}List() {
|
async get${originalName}List() {
|
||||||
// 整理请求参数
|
// 整理请求参数
|
||||||
const data = { ...this.pagination, ...this.form };
|
const data = { ...this.pagination, ...this.form };
|
||||||
|
@ -50,25 +48,19 @@ export const use${originalName}Store = defineStore('${lowercaseName}Store', {
|
||||||
return pagination(result);
|
return pagination(result);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/** 添加${classTitle} */
|
||||||
* * 添加${classTitle}
|
|
||||||
*/
|
|
||||||
async add${originalName}(data: any) {
|
async add${originalName}(data: any) {
|
||||||
const result = await fetchAdd${originalName}(data);
|
const result = await fetchAdd${originalName}(data);
|
||||||
return storeMessage(result);
|
return storeMessage(result);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/** 修改${classTitle} */
|
||||||
* * 修改${classTitle}
|
|
||||||
*/
|
|
||||||
async update${originalName}(data: any) {
|
async update${originalName}(data: any) {
|
||||||
const result = await fetchUpdate${originalName}(data);
|
const result = await fetchUpdate${originalName}(data);
|
||||||
return storeMessage(result);
|
return storeMessage(result);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/** 删除${classTitle} */
|
||||||
* * 删除${classTitle}
|
|
||||||
*/
|
|
||||||
async delete${originalName}(data: any) {
|
async delete${originalName}(data: any) {
|
||||||
const result = await fetchDelete${originalName}(data);
|
const result = await fetchDelete${originalName}(data);
|
||||||
return storeMessage(result);
|
return storeMessage(result);
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
package cn.bunny.dao.dto.system.email;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Schema(name = "EmailUserUpdateStatusDto对象", title = "邮箱用户更新状态", description = "邮箱用户更新状态表单")
|
||||||
|
public class EmailUserUpdateStatusDto {
|
||||||
|
|
||||||
|
@Schema(name = "id", title = "主键")
|
||||||
|
@NotNull(message = "id不能为空")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(name = "isDefault", title = "是否为默认邮件")
|
||||||
|
private Boolean isDefault;
|
||||||
|
|
||||||
|
}
|
|
@ -48,3 +48,5 @@ public class EmailUsersUpdateDto {
|
||||||
private Boolean isDefault;
|
private Boolean isDefault;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,16 +46,6 @@
|
||||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
<version>3.2.3</version>
|
<version>3.2.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>de.codecentric</groupId>
|
|
||||||
<artifactId>spring-boot-admin-starter-server</artifactId>
|
|
||||||
<version>3.2.3</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>de.codecentric</groupId>
|
|
||||||
<artifactId>spring-boot-admin-starter-client</artifactId>
|
|
||||||
<version>3.2.3</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- 单元测试 -->
|
<!-- 单元测试 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package cn.bunny.services;
|
package cn.bunny.services;
|
||||||
|
|
||||||
import de.codecentric.boot.admin.server.config.EnableAdminServer;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
|
@ -13,7 +12,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
@MapperScan("cn.bunny.services.mapper")
|
@MapperScan("cn.bunny.services.mapper")
|
||||||
@ComponentScan("cn.bunny")
|
@ComponentScan("cn.bunny")
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
@EnableAdminServer
|
|
||||||
@EnableCaching
|
@EnableCaching
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.bunny.services.controller;
|
package cn.bunny.services.controller;
|
||||||
|
|
||||||
|
import cn.bunny.dao.dto.system.email.EmailUserUpdateStatusDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
|
||||||
|
@ -63,6 +64,13 @@ public class EmailUsersController {
|
||||||
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
|
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "更新邮箱用户状态", description = "更新邮箱用户状态")
|
||||||
|
@PutMapping("updateEmailUserStatus")
|
||||||
|
public Mono<Result<String>> updateEmailUserStatus(@Valid @RequestBody EmailUserUpdateStatusDto dto) {
|
||||||
|
emailUsersService.updateEmailUserStatus(dto);
|
||||||
|
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS));
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(summary = "删除邮箱用户发送配置", description = "删除邮箱用户发送配置")
|
@Operation(summary = "删除邮箱用户发送配置", description = "删除邮箱用户发送配置")
|
||||||
@DeleteMapping("deleteEmailUsers")
|
@DeleteMapping("deleteEmailUsers")
|
||||||
public Mono<Result<String>> deleteEmailUsers(@RequestBody List<Long> ids) {
|
public Mono<Result<String>> deleteEmailUsers(@RequestBody List<Long> ids) {
|
||||||
|
|
|
@ -17,11 +17,11 @@ import org.springframework.web.bind.annotation.RestController;
|
||||||
@RequestMapping("/")
|
@RequestMapping("/")
|
||||||
public class IndexController {
|
public class IndexController {
|
||||||
|
|
||||||
// @Operation(summary = "访问首页", description = "访问首页")
|
@Operation(summary = "访问首页", description = "访问首页")
|
||||||
// @GetMapping("")
|
@GetMapping("")
|
||||||
// public String index() {
|
public String index() {
|
||||||
// return "欢迎访问 Bunny Java Template,欢迎去Gitee:https://gitee.com/BunnyBoss/java_single.git";
|
return "欢迎访问 Bunny Java Template,欢迎去Gitee:https://gitee.com/BunnyBoss/java_single.git";
|
||||||
// }
|
}
|
||||||
|
|
||||||
@Operation(summary = "生成验证码", description = "生成验证码")
|
@Operation(summary = "生成验证码", description = "生成验证码")
|
||||||
@GetMapping("noAuth/checkCode")
|
@GetMapping("noAuth/checkCode")
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package cn.bunny.services.security.config;
|
package cn.bunny.services.security.config;
|
||||||
|
|
||||||
import cn.bunny.services.security.custom.CustomPasswordEncoder;
|
import cn.bunny.services.security.custom.CustomPasswordEncoder;
|
||||||
|
import cn.bunny.services.security.filter.NoTokenAuthenticationFilter;
|
||||||
|
import cn.bunny.services.security.filter.TokenAuthenticationFilter;
|
||||||
import cn.bunny.services.security.filter.TokenLoginFilterService;
|
import cn.bunny.services.security.filter.TokenLoginFilterService;
|
||||||
import cn.bunny.services.security.handelr.SecurityAccessDeniedHandler;
|
import cn.bunny.services.security.handelr.SecurityAccessDeniedHandler;
|
||||||
import cn.bunny.services.security.handelr.SecurityAuthenticationEntryPoint;
|
import cn.bunny.services.security.handelr.SecurityAuthenticationEntryPoint;
|
||||||
|
@ -16,8 +18,6 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
|
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
|
||||||
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
||||||
import org.springframework.security.core.session.SessionRegistry;
|
|
||||||
import org.springframework.security.core.session.SessionRegistryImpl;
|
|
||||||
import org.springframework.security.web.SecurityFilterChain;
|
import org.springframework.security.web.SecurityFilterChain;
|
||||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||||
import org.springframework.security.web.util.matcher.RegexRequestMatcher;
|
import org.springframework.security.web.util.matcher.RegexRequestMatcher;
|
||||||
|
@ -58,12 +58,7 @@ public class WebSecurityConfig {
|
||||||
.sessionManagement(AbstractHttpConfigurer::disable)
|
.sessionManagement(AbstractHttpConfigurer::disable)
|
||||||
// 前后端分离不需要---记住我,e -> e.rememberMeParameter("rememberBunny").rememberMeCookieName("rememberBunny").key("BunnyKey")
|
// 前后端分离不需要---记住我,e -> e.rememberMeParameter("rememberBunny").rememberMeCookieName("rememberBunny").key("BunnyKey")
|
||||||
.rememberMe(AbstractHttpConfigurer::disable)
|
.rememberMe(AbstractHttpConfigurer::disable)
|
||||||
.authorizeHttpRequests(authorize -> {
|
.authorizeHttpRequests(authorize -> authorize.anyRequest().access(customAuthorizationManagerService))
|
||||||
// 有样式文件,不需要访问权限
|
|
||||||
authorize.requestMatchers(RegexRequestMatcher.regexMatcher(".*\\.(css|js)$")).permitAll();
|
|
||||||
// 上面都不是需要鉴权访问
|
|
||||||
authorize.anyRequest().access(customAuthorizationManagerService);
|
|
||||||
})
|
|
||||||
.exceptionHandling(exception -> {
|
.exceptionHandling(exception -> {
|
||||||
// 请求未授权接口
|
// 请求未授权接口
|
||||||
exception.authenticationEntryPoint(new SecurityAuthenticationEntryPoint());
|
exception.authenticationEntryPoint(new SecurityAuthenticationEntryPoint());
|
||||||
|
@ -73,29 +68,24 @@ public class WebSecurityConfig {
|
||||||
// 登录验证过滤器
|
// 登录验证过滤器
|
||||||
.addFilterBefore(new TokenLoginFilterService(authenticationConfiguration, redisTemplate, customUserDetailsService), UsernamePasswordAuthenticationFilter.class)
|
.addFilterBefore(new TokenLoginFilterService(authenticationConfiguration, redisTemplate, customUserDetailsService), UsernamePasswordAuthenticationFilter.class)
|
||||||
// 其它权限鉴权过滤器
|
// 其它权限鉴权过滤器
|
||||||
// .addFilterAt(new NoTokenAuthenticationFilter(redisTemplate), UsernamePasswordAuthenticationFilter.class)
|
.addFilterAt(new NoTokenAuthenticationFilter(redisTemplate), UsernamePasswordAuthenticationFilter.class)
|
||||||
// .addFilterAt(new TokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
|
.addFilterAt(new TokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
|
||||||
// 自定义密码加密器和用户登录
|
// 自定义密码加密器和用户登录
|
||||||
.passwordManagement(customPasswordEncoder).userDetailsService(customUserDetailsService);
|
.passwordManagement(customPasswordEncoder).userDetailsService(customUserDetailsService);
|
||||||
|
|
||||||
return httpSecurity.build();
|
return httpSecurity.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
public SessionRegistry sessionRegistry() {
|
|
||||||
return new SessionRegistryImpl();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 排出鉴定路径
|
// 排出鉴定路径
|
||||||
@Bean
|
@Bean
|
||||||
public WebSecurityCustomizer webSecurityCustomizer() {
|
public WebSecurityCustomizer webSecurityCustomizer() {
|
||||||
String[] annotations = {
|
String[] annotations = {
|
||||||
"/", "/ws/**",
|
"/", "/ws/**",
|
||||||
"/*/*/noAuth/**", "/*/noAuth/**", "/noAuth/**",
|
"/*/*/noAuth/**", "/*/noAuth/**", "/noAuth/**",
|
||||||
"/media.ico", "/favicon.ico", "*.html", "/webjars/**", "/error",
|
"/media.ico", "/favicon.ico", "*.html", "/webjars/**", "/v3/api-docs/**",
|
||||||
"/*/i18n/getI18n",
|
"/error", "/*/i18n/getI18n",
|
||||||
};
|
};
|
||||||
return web -> web.ignoring().requestMatchers(annotations);
|
return web -> web.ignoring().requestMatchers(annotations)
|
||||||
// .requestMatchers(RegexRequestMatcher.regexMatcher(".*\\.(css|js)$"));
|
.requestMatchers(RegexRequestMatcher.regexMatcher(".*\\.(css|js)$"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,20 @@
|
||||||
package cn.bunny.services.security.service.impl;
|
package cn.bunny.services.security.service.impl;
|
||||||
|
|
||||||
import cn.bunny.common.service.context.BaseContext;
|
import cn.bunny.common.service.context.BaseContext;
|
||||||
import cn.bunny.common.service.utils.JwtHelper;
|
|
||||||
import cn.bunny.common.service.utils.ResponseUtil;
|
|
||||||
import cn.bunny.dao.entity.system.Power;
|
import cn.bunny.dao.entity.system.Power;
|
||||||
import cn.bunny.dao.pojo.constant.RedisUserConstant;
|
|
||||||
import cn.bunny.dao.pojo.result.Result;
|
|
||||||
import cn.bunny.dao.pojo.result.ResultCodeEnum;
|
|
||||||
import cn.bunny.dao.vo.system.user.LoginVo;
|
import cn.bunny.dao.vo.system.user.LoginVo;
|
||||||
import cn.bunny.services.mapper.PowerMapper;
|
import cn.bunny.services.mapper.PowerMapper;
|
||||||
import cn.bunny.services.security.custom.CustomCheckIsAdmin;
|
import cn.bunny.services.security.custom.CustomCheckIsAdmin;
|
||||||
import com.alibaba.fastjson2.JSON;
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
import org.springframework.security.authorization.AuthorizationDecision;
|
import org.springframework.security.authorization.AuthorizationDecision;
|
||||||
import org.springframework.security.authorization.AuthorizationManager;
|
import org.springframework.security.authorization.AuthorizationManager;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.web.access.intercept.RequestAuthorizationContext;
|
import org.springframework.security.web.access.intercept.RequestAuthorizationContext;
|
||||||
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
|
||||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
@ -38,9 +28,6 @@ import java.util.function.Supplier;
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class CustomAuthorizationManagerServiceImpl implements AuthorizationManager<RequestAuthorizationContext> {
|
public class CustomAuthorizationManagerServiceImpl implements AuthorizationManager<RequestAuthorizationContext> {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private PowerMapper powerMapper;
|
private PowerMapper powerMapper;
|
||||||
|
|
||||||
|
@ -50,54 +37,10 @@ public class CustomAuthorizationManagerServiceImpl implements AuthorizationManag
|
||||||
// 用户的token和用户id、请求Url
|
// 用户的token和用户id、请求Url
|
||||||
HttpServletRequest request = context.getRequest();
|
HttpServletRequest request = context.getRequest();
|
||||||
|
|
||||||
// 是否访问的是接口内容
|
|
||||||
boolean matches = AntPathRequestMatcher.antMatcher("/admin/**").matches(request);
|
|
||||||
if (!matches) return new AuthorizationDecision(true);
|
|
||||||
|
|
||||||
if (checkToken(request)) {
|
|
||||||
return new AuthorizationDecision(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 校验权限
|
// 校验权限
|
||||||
return new AuthorizationDecision(hasAuth(request));
|
return new AuthorizationDecision(hasAuth(request));
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkToken(HttpServletRequest request) {
|
|
||||||
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse();
|
|
||||||
if (response == null) return false;
|
|
||||||
|
|
||||||
// 判断是否有 token
|
|
||||||
String token = request.getHeader("token");
|
|
||||||
if (token == null) {
|
|
||||||
ResponseUtil.out(response, Result.error(ResultCodeEnum.LOGIN_AUTH));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断 token 是否过期
|
|
||||||
if (JwtHelper.isExpired(token)) {
|
|
||||||
ResponseUtil.out(response, Result.error(ResultCodeEnum.AUTHENTICATION_EXPIRED));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 查找 Redis
|
|
||||||
String username = JwtHelper.getUsername(token);
|
|
||||||
Long userId = JwtHelper.getUserId(token);
|
|
||||||
Object loginVoObject = redisTemplate.opsForValue().get(RedisUserConstant.getAdminLoginInfoPrefix(username));
|
|
||||||
LoginVo loginVo = JSON.parseObject(JSON.toJSONString(loginVoObject), LoginVo.class);
|
|
||||||
|
|
||||||
// 判断用户是否禁用
|
|
||||||
if (loginVo != null && loginVo.getStatus()) {
|
|
||||||
ResponseUtil.out(response, Result.error(ResultCodeEnum.FAIL_NO_ACCESS_DENIED_USER_LOCKED));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置用户信息
|
|
||||||
BaseContext.setUsername(username);
|
|
||||||
BaseContext.setUserId(userId);
|
|
||||||
BaseContext.setLoginVo(loginVo);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询用户所属的角色信息
|
* 查询用户所属的角色信息
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.bunny.services.service;
|
package cn.bunny.services.service;
|
||||||
|
|
||||||
|
import cn.bunny.dao.dto.system.email.EmailUserUpdateStatusDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
|
||||||
|
@ -49,4 +50,11 @@ public interface EmailUsersService extends IService<EmailUsers> {
|
||||||
* @param ids 删除id列表
|
* @param ids 删除id列表
|
||||||
*/
|
*/
|
||||||
void deleteEmailUsers(List<Long> ids);
|
void deleteEmailUsers(List<Long> ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 更新邮箱用户状态
|
||||||
|
*
|
||||||
|
* @param dto 邮箱用户更新状态表单
|
||||||
|
*/
|
||||||
|
void updateEmailUserStatus(EmailUserUpdateStatusDto dto);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.bunny.services.service.impl;
|
package cn.bunny.services.service.impl;
|
||||||
|
|
||||||
|
import cn.bunny.dao.dto.system.email.EmailUserUpdateStatusDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersAddDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersDto;
|
||||||
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
|
import cn.bunny.dao.dto.system.email.EmailUsersUpdateDto;
|
||||||
|
@ -89,4 +90,16 @@ public class EmailUsersServiceImpl extends ServiceImpl<EmailUsersMapper, EmailUs
|
||||||
public void deleteEmailUsers(List<Long> ids) {
|
public void deleteEmailUsers(List<Long> ids) {
|
||||||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 更新邮箱用户状态
|
||||||
|
*
|
||||||
|
* @param dto 邮箱用户更新状态表单
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void updateEmailUserStatus(EmailUserUpdateStatusDto dto) {
|
||||||
|
EmailUsers emailUsers = new EmailUsers();
|
||||||
|
BeanUtils.copyProperties(dto, emailUsers);
|
||||||
|
updateById(emailUsers);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,6 @@ bunny:
|
||||||
sqlData: auth_admin
|
sqlData: auth_admin
|
||||||
username: root
|
username: root
|
||||||
password: "02120212"
|
password: "02120212"
|
||||||
datasource2:
|
|
||||||
host: 106.15.251.123
|
|
||||||
port: 3305
|
|
||||||
sqlData: auth_i18n
|
|
||||||
username: root
|
|
||||||
password: "02120212"
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
host: 192.168.3.98
|
host: 192.168.3.98
|
||||||
|
|
|
@ -5,12 +5,6 @@ bunny:
|
||||||
sqlData: auth_admin
|
sqlData: auth_admin
|
||||||
username: root
|
username: root
|
||||||
password: "02120212"
|
password: "02120212"
|
||||||
datasource2:
|
|
||||||
host: 106.15.251.123
|
|
||||||
port: 3305
|
|
||||||
sqlData: auth_i18n
|
|
||||||
username: root
|
|
||||||
password: "02120212"
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
host: 192.168.3.98
|
host: 192.168.3.98
|
||||||
|
|
|
@ -26,12 +26,7 @@ spring:
|
||||||
servlet:
|
servlet:
|
||||||
multipart:
|
multipart:
|
||||||
max-file-size: 6MB
|
max-file-size: 6MB
|
||||||
boot:
|
|
||||||
admin:
|
|
||||||
client:
|
|
||||||
url: "http://localhost:7070"
|
|
||||||
username: admin
|
|
||||||
password: admin
|
|
||||||
datasource:
|
datasource:
|
||||||
# type: com.zaxxer.hikari.HikariDataSource
|
# type: com.zaxxer.hikari.HikariDataSource
|
||||||
# driver-class-name: com.mysql.cj.jdbc.Driver
|
# driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
@ -49,12 +44,6 @@ spring:
|
||||||
url: jdbc:mysql://${bunny.datasource1.host}:${bunny.datasource1.port}/${bunny.datasource1.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
url: jdbc:mysql://${bunny.datasource1.host}:${bunny.datasource1.port}/${bunny.datasource1.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
||||||
username: ${bunny.datasource1.username}
|
username: ${bunny.datasource1.username}
|
||||||
password: ${bunny.datasource1.password}
|
password: ${bunny.datasource1.password}
|
||||||
i18n:
|
|
||||||
type: com.zaxxer.hikari.HikariDataSource
|
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
|
||||||
url: jdbc:mysql://${bunny.datasource2.host}:${bunny.datasource2.port}/${bunny.datasource2.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true
|
|
||||||
username: ${bunny.datasource2.username}
|
|
||||||
password: ${bunny.datasource2.password}
|
|
||||||
aop:
|
aop:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
|
@ -75,7 +64,6 @@ spring:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
|
|
||||||
# rabbitmq:
|
# rabbitmq:
|
||||||
# host: ${bunny.rabbitmq.host}
|
# host: ${bunny.rabbitmq.host}
|
||||||
# port: ${bunny.rabbitmq.port}
|
# port: ${bunny.rabbitmq.port}
|
||||||
|
|
Loading…
Reference in New Issue