xiaoyong931011
2022-05-27 39de91481b6e9f2e7bca5c09396edbc9b41a6afc
20220527
4 files added
12 files modified
192 ■■■■■ changed files
src/main/java/com/xcong/farmer/cms/configurations/properties/ApplicationProperties.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/configurations/security/WebSecurityConfig.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java 55 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java 76 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java 8 ●●●● patch | view | raw | blame | history
src/main/resources/application.yml 1 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/UserMapper.xml 4 ●●●● patch | view | raw | blame | history
src/test/java/com/xcong/farmer/cms/RSATest.java 6 ●●●● patch | view | raw | blame | history
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;
}
src/main/java/com/xcong/farmer/cms/configurations/properties/SecurityProperties.java
@@ -14,4 +14,6 @@
public class SecurityProperties {
    private String privateKey;
    private String publicKey;
}
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());
    }
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java
New file
@@ -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);
    }
}
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 {
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 {
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 {
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminLoginDto.java
New file
@@ -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;
}
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";
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);
}
src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java
New file
@@ -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);
}
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java
New file
@@ -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);
    }
}
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("重置成功");
    }
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==
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>
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);
    }