From 39de91481b6e9f2e7bca5c09396edbc9b41a6afc Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 27 May 2022 11:12:49 +0800 Subject: [PATCH] 20220527 --- src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java | 1 src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java | 12 +++ src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java | 2 src/test/java/com/xcong/farmer/cms/RSATest.java | 6 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java | 8 +- src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java | 1 src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java | 2 src/main/resources/mapper/UserMapper.xml | 4 + src/main/java/com/xcong/farmer/cms/configurations/properties/ApplicationProperties.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java | 14 +++ src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java | 55 +++++++++++++ src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java | 4 + src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java | 76 +++++++++++++++++++ src/main/resources/application.yml | 1 16 files changed, 182 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/xcong/farmer/cms/configurations/properties/ApplicationProperties.java b/src/main/java/com/xcong/farmer/cms/configurations/properties/ApplicationProperties.java index abee2dc..a9a2ca4 100644 --- a/src/main/java/com/xcong/farmer/cms/configurations/properties/ApplicationProperties.java +++ b/src/main/java/com/xcong/farmer/cms/configurations/properties/ApplicationProperties.java @@ -14,5 +14,7 @@ @Configuration @ConfigurationProperties(prefix = "app") public class ApplicationProperties { + private boolean debug; + } diff --git a/src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java b/src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java index e89fb41..bb3e323 100644 --- a/src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java +++ b/src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java @@ -14,4 +14,6 @@ public class SecurityProperties { private String privateKey; + + private String publicKey; } diff --git a/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java b/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java index 7012aae..0fe9e94 100644 --- a/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java +++ b/src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java @@ -42,6 +42,7 @@ .antMatchers("/swagger**/**").permitAll() .antMatchers("/webjars/**").permitAll() .antMatchers("/v2/**").permitAll() + .antMatchers("/api/common/**").permitAll() .anyRequest().authenticated() .and().apply(securityConfiguereAdapter()); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java new file mode 100644 index 0000000..edccb6c --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java @@ -0,0 +1,55 @@ +package com.xcong.farmer.cms.modules.system.Controller; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.alibaba.fastjson.JSONObject; +import com.xcong.farmer.cms.common.contants.AppContants; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.common.system.bean.LoginUserBean; +import com.xcong.farmer.cms.common.system.dto.LoginDto; +import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto; +import com.xcong.farmer.cms.modules.system.service.ICommonService; +import com.xcong.farmer.cms.modules.system.service.IUserService; +import com.xcong.farmer.cms.utils.RedisUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping(value = "/api/common") +@Slf4j +@Api(value = "登录", tags = "登录") +public class AdminCommonController { + + @Resource + private ICommonService iCommonService; + + @ApiOperation(value = "登陆接口", notes = "登陆接口") + @PostMapping("/login") + public Result login(@RequestBody AdminLoginDto adminLoginDto) { + + String username = adminLoginDto.getUsername(); + if(StrUtil.isEmpty(username)){ + return Result.fail("请输入用户名"); + } + String password = adminLoginDto.getPassword(); + if(StrUtil.isEmpty(password)){ + return Result.fail("请输入密码"); + } + return iCommonService.login(adminLoginDto); + } + +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java index 5deebfa..d868849 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java @@ -18,7 +18,7 @@ import javax.validation.Valid; @RestController -@RequestMapping(value = "/menu") +@RequestMapping(value = "/api/menu") @Slf4j @Api(value = "系统菜单", tags = "系统菜单") public class AdminMenuController { diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java index 44a5fae..81a54a4 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java @@ -18,7 +18,7 @@ import javax.validation.Valid; @RestController -@RequestMapping(value = "/role") +@RequestMapping(value = "/api/role") @Slf4j @Api(value = "系统角色", tags = "系统角色") public class AdminRoleController { diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java index 2b04b81..4af43fd 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java @@ -21,7 +21,7 @@ import javax.validation.Valid; @RestController -@RequestMapping(value = "/user") +@RequestMapping(value = "/api/user") @Slf4j @Api(value = "系统用户", tags = "系统用户") public class AdminUserController { diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java new file mode 100644 index 0000000..901359f --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java @@ -0,0 +1,14 @@ +package com.xcong.farmer.cms.modules.system.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@Data +@ApiModel(value = "AdminLoginDto", description = "参数接收类") +public class AdminLoginDto { + + private String username; + + private String password; + +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java index 638af70..0b3958b 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java @@ -11,6 +11,10 @@ @TableName("t_user") public class UserEntity extends BaseEntity { /** + * 默认账户 + */ + public static final String USERNAME_DEFAULT = "system"; + /** * 默认密码 */ public static final String PASSWORD_DEFAULT = "123456"; diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java index bf49c1d..202a9ff 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java @@ -11,4 +11,5 @@ IPage<AdminUserVo> selectAdminUserVoInPage(Page<AdminUserVo> page, @Param("record") UserEntity userEntity); + UserEntity selectByUserNameAndPassword(@Param("username")String username, @Param("password")String md5Password); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java new file mode 100644 index 0000000..5eb9be0 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java @@ -0,0 +1,12 @@ +package com.xcong.farmer.cms.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto; +import com.xcong.farmer.cms.modules.system.entity.UserEntity; + +public interface ICommonService extends IService<UserEntity> { + + Result login(AdminLoginDto adminLoginDto); + +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java new file mode 100644 index 0000000..6b165e1 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java @@ -0,0 +1,76 @@ +package com.xcong.farmer.cms.modules.system.service.Impl; + +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.farmer.cms.common.contants.AppContants; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.configurations.properties.ApplicationProperties; +import com.xcong.farmer.cms.configurations.properties.SecurityProperties; +import com.xcong.farmer.cms.modules.system.dto.AdminLoginDto; +import com.xcong.farmer.cms.modules.system.entity.UserEntity; +import com.xcong.farmer.cms.modules.system.mapper.UserMapper; +import com.xcong.farmer.cms.modules.system.service.ICommonService; +import com.xcong.farmer.cms.utils.RedisUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.crypto.asymmetric.RSA; + +@Service +@Slf4j +public class CommonServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements ICommonService { + + @Resource + private UserMapper userMapper; + @Resource + private RedisUtils redisUtils; + @Resource + private ApplicationProperties applicationProperties; + @Resource + private SecurityProperties securityProperties; + + @Override + public Result login(AdminLoginDto adminLoginDto) { + String username = adminLoginDto.getUsername(); + String password = adminLoginDto.getPassword(); + UserEntity userEntity = userMapper.selectByUserNameAndPassword(username, SecureUtil.md5(password)); + if(ObjectUtil.isEmpty(userEntity)){ + return Result.fail("请输入正确的账号和密码"); + } + //生成UUID作为token + String token = IdUtil.simpleUUID(); + String redisToken = AppContants.APP_LOGIN_PREFIX + token; + String redisMember = AppContants.APP_LOGIN_PREFIX + userEntity.getId(); + + if (StrUtil.isNotBlank(redisUtils.getString(redisMember))) { + redisUtils.del(AppContants.APP_LOGIN_PREFIX + redisUtils.getString(redisMember)); + } + redisUtils.set(redisToken, JSONObject.toJSONString(userEntity), 3000L); + redisUtils.set(redisMember, token); + + Map<String, Object> authInfo = new HashMap<>(); + // 开启debug模式,则将加密后的token返回 + if (applicationProperties.isDebug()) { + authInfo.put("token", token); + authInfo.put("rsaToken", AppContants.TOKEN_START_WITH + generateAsaToken(token)); + authInfo.put("user", userEntity); + } else { + authInfo.put("token", token); + authInfo.put("user", userEntity); + } + return Result.ok("登录成功", authInfo); + } + + public String generateAsaToken(String token) { + RSA rsa = new RSA(null, securityProperties.getPublicKey()); + return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey); + } +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java index 66dd7c0..7b15c11 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java @@ -1,5 +1,6 @@ package com.xcong.farmer.cms.modules.system.service.Impl; +import cn.hutool.crypto.SecureUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -18,7 +19,6 @@ import org.springframework.stereotype.Service; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.codec.Rot; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -71,8 +71,8 @@ if(StrUtil.isNotEmpty(adminAddUserDto.getEmail())){ userEntity.setEmail(adminAddUserDto.getEmail()); } - ; - userEntity.setPassword(Rot.encode13(UserEntity.PASSWORD_DEFAULT)); + + userEntity.setPassword(SecureUtil.md5(UserEntity.PASSWORD_DEFAULT)); userEntity.setStatus(UserEntity.STATUS_ENABLE); int insert = this.baseMapper.insert(userEntity); if(insert > 0){ @@ -180,7 +180,7 @@ if(ObjectUtil.isEmpty(userEntity)){ return Result.fail("用户不存在"); } - userEntity.setPassword(Rot.encode13(UserEntity.PASSWORD_DEFAULT)); + userEntity.setPassword(SecureUtil.md5(UserEntity.PASSWORD_DEFAULT)); this.baseMapper.updateById(userEntity); return Result.ok("重置成功"); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0086006..255857b 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -77,4 +77,5 @@ debug: true rsa: + public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCf8UFZK54AiK4PRu7tNd+Z8qZ77o/QXCnk25DRmygVpOEu5mGNSAvfnWmKp2pEV2RljeXq3Rid/+LQkonaebMJeXKSF0yxL/VgyeT8JaQ5gNbOrdfdlc+mFkXJyzyJt8YkvApEdPRNSU2ENBn7mgRfD0BYPM4vZ6/rv+de38FJwIDAQAB private_key: MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIJ/xQVkrngCIrg9G7u0135nypnvuj9BcKeTbkNGbKBWk4S7mYY1IC9+daYqnakRXZGWN5erdGJ3/4tCSidp5swl5cpIXTLEv9WDJ5PwlpDmA1s6t192Vz6YWRcnLPIm3xiS8CkR09E1JTYQ0GfuaBF8PQFg8zi9nr+u/517fwUnAgMBAAECgYBhPt9NvpI4wbanvnndLczr2GJkxfzvSE+vwLCJF4C5FusFHVsxZINggQcg1V75bwRgCiXRMyYefreCSdrCditS43PzTOmE4RRrpxLlm8oubJc0C98LQ2qlN9AsUqL5IHpVGgbHDyWAwjc1GBID6nwXKpxq1/VodFqhahG9D5EZsQJBALnkb+5VTxQbiyQI4Uc9NIvAyVcNY1OisbvY6tvNgdBbJkADgAb78M1HWxxYjUqsvzggNHc7cWqWBHMgpnJaqm8CQQCztze4D7uAk7OC9MJHY5eE980J8Kk+GEZKxz4LahzU6V6dcb9GFac3wEtgilj/tOAn9y0/Q8sm9vvCIbMDzgzJAkEAqRYcqhF26LdVDOX25DHMBgLKISDQZFbsjA13M4/usHL4i+mjHrc0BcUOHu59NpuDI65HitzLAUSLr5zXSdUmiQJAW77wOg4GCejdXsB3IhzMsHwU97sdm26nC+vVV9xvJZ6Rx8zW+f9543NOx9U5BCmhuaVtOvvwDU9PTVcI3atmSQJAXAIJ5gGdtXx0DXiX4VvzNFHqgaqHMGvXyjNVkU2FYQbSAd2A6app4uRO+BkZu9dSjh14m+oXMnV2HzAN2rRnjA== diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index d417a2a..1545105 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -17,4 +17,8 @@ order by a.create_time desc </select> + <select id="selectByUserNameAndPassword" resultType="com.xcong.farmer.cms.modules.system.entity.UserEntity"> + SELECT a.* FROM t_user a where a.username = #{username} and a.password = #{password} + </select> + </mapper> \ No newline at end of file diff --git a/src/test/java/com/xcong/farmer/cms/RSATest.java b/src/test/java/com/xcong/farmer/cms/RSATest.java index 6f38abe..69d2fc1 100644 --- a/src/test/java/com/xcong/farmer/cms/RSATest.java +++ b/src/test/java/com/xcong/farmer/cms/RSATest.java @@ -7,6 +7,7 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; +import com.xcong.farmer.cms.modules.system.entity.UserEntity; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -28,9 +29,8 @@ @Test public void rsaTest() { - KeyPair keyPair = SecureUtil.generateKeyPair("RSA"); - log.info("{}", Base64.encode(keyPair.getPublic().getEncoded())); - log.info("{}", Base64.encode(keyPair.getPrivate().getEncoded())); + String s = SecureUtil.md5(UserEntity.PASSWORD_DEFAULT); + System.out.println(s); } -- Gitblit v1.9.1