diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TestController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TestController.java index bb3d729..63a1ff7 100644 --- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TestController.java +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TestController.java @@ -6,6 +6,11 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -18,20 +23,40 @@ import org.springframework.web.bind.annotation.RestController; @Slf4j public class TestController { -// @ApiOperation(value = "测试", notes = "测试notes", httpMethod = "POST") + @ApiOperation(value = "测试", notes = "测试notes", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/user/login") + @Log(title = "测试", type = "查询") + public String gettest() { + log.info("有一个沙雕点了链接"); + return "/api/index2"; + } + + @GetMapping("/user/logins") + @Log(title = "测试", type = "查询") + public String hhtest() { + log.info("有一个沙雕点了链接"); + return "/api/index2.html"; + } + + @ApiOperation(value = "登录", notes = "登录", httpMethod = "POST") // @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) -// @RequestMapping("/getBannerList") -// @Log(title = "测试", type = "查询") -// public String gettest() { -// log.info("有一个沙雕点了链接"); -// return "index222"; -// } -// -// -// @GetMapping("") -// @Log(title = "测试", type = "查询") -// public String hhtest() { -// log.info("有一个沙雕点了链接"); -// return "index2"; -// } + @RequestMapping("/login") + @Log(title = "登录", type = "查询") + public String login(String username, String password) { + //获取主题对象 + Subject subject = SecurityUtils.getSubject(); + try { + subject.login(new UsernamePasswordToken(username,password)); + System.out.println("登录成功!!!"); + return "登录成功"; + } catch (UnknownAccountException e) { + e.printStackTrace(); + System.out.println("用户错误!!!"); + } catch (IncorrectCredentialsException e) { + System.out.println("密码错误!!!"); + } + return "登录失败"; + } + } diff --git a/xymanager_admin/src/test/java/com/shxy/xymanager_admin/XymanagerAdminApplicationTests.java b/xymanager_admin/src/test/java/com/shxy/xymanager_admin/XymanagerAdminApplicationTests.java index 2a044fb..b219aef 100644 --- a/xymanager_admin/src/test/java/com/shxy/xymanager_admin/XymanagerAdminApplicationTests.java +++ b/xymanager_admin/src/test/java/com/shxy/xymanager_admin/XymanagerAdminApplicationTests.java @@ -2,16 +2,23 @@ package com.shxy.xymanager_admin; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateTime; +import com.shxy.xymanager_common.dto.ChannelAndTermDto; +import com.shxy.xymanager_common.dto.PhotoAndLineAndChannelDto; +import com.shxy.xymanager_common.dto.TermAndChannelLatestPhotoMapperDto; import com.shxy.xymanager_common.entity.DyLevel; import com.shxy.xymanager_common.enums.CommonStatus; import com.shxy.xymanager_common.model.LineAndGtAndChannelListModel; import com.shxy.xymanager_common.util.MyDateUtils; +import com.shxy.xymanager_common.util.SaltUtil; import com.shxy.xymanager_dao.dao.*; +import io.swagger.models.auth.In; +import org.apache.shiro.crypto.hash.Md5Hash; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.math.BigInteger; +import java.util.ArrayList; import java.util.List; @SpringBootTest @@ -27,6 +34,9 @@ class XymanagerAdminApplicationTests { LinesDao linesDao; @Autowired private DyLevelDao dyLevelDao; + + @Autowired + private TerminalPhotoDao terminalPhotoDao; @Test void contextLoads() { @@ -88,13 +98,33 @@ class XymanagerAdminApplicationTests { // List beans = BeanUtil.copyToList(list, LineAndGtAndChannelListModel.Bean.class); // System.out.println(beans.toArray()); - BigInteger time = MyDateUtils.TimeSecond2MillSecond(1683682322); - DateTime date = MyDateUtils.date(time.longValue()); - BigInteger time1 = MyDateUtils.TimeSecond2MillSecond(1683683185); - DateTime date1 = MyDateUtils.date(time1.longValue()); - BigInteger time2 = MyDateUtils.TimeSecond2MillSecond(1683683196); - DateTime date2 = MyDateUtils.date(time2.longValue()); - System.out.println(date + " " + date2 ); +// BigInteger time = MyDateUtils.TimeSecond2MillSecond(1683682322); +// DateTime date = MyDateUtils.date(time.longValue()); +// BigInteger time1 = MyDateUtils.TimeSecond2MillSecond(1683683185); +// DateTime date1 = MyDateUtils.date(time1.longValue()); +// BigInteger time2 = MyDateUtils.TimeSecond2MillSecond(1683683196); +// DateTime date2 = MyDateUtils.date(time2.longValue()); +// System.out.println(date + " " + date2 ); + +// List list = new ArrayList<>(); +// list.add(10002); +// list.add(10005); +// List lists = terminalPhotoDao.selectTermAndChannelLatestPhotoList(list); +// System.out.println(lists); +// List list = terminalsDao.selectChannelAndTermList(CommonStatus.EFFECTIVE.value()); +// System.out.println(list); + + + //1.获取随机盐 + String salt = SaltUtil.getSalt(8); + //2.将随机盐保存到数据 +// user.setSalt(salt); + //3.明文密码进行md5 + salt + hash散列 + Md5Hash MD5 = new Md5Hash("123456",salt,1024); + System.out.println(MD5.toHex()); + System.out.println(""); +// user.setPassword(MD5.toHex()); +// userDao.save(user); } } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/ApplicationContextUtil.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/ApplicationContextUtil.java new file mode 100644 index 0000000..921f531 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/ApplicationContextUtil.java @@ -0,0 +1,22 @@ +package com.shxy.xymanager_common.util; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class ApplicationContextUtil implements ApplicationContextAware { + + private static ApplicationContext context; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.context = applicationContext; + } + + //根据bean名字获取工厂中指定bean 对象 + public static Object getBean(String beanName) { + return context.getBean(beanName); + } +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/SaltUtil.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/SaltUtil.java new file mode 100644 index 0000000..4070f07 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/SaltUtil.java @@ -0,0 +1,19 @@ +package com.shxy.xymanager_common.util; + +import java.util.Random; + +public class SaltUtil { + public static String getSalt(int n) { + char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@#$%^&*()".toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < n; i++) { + char c = chars[new Random().nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static void main(String[] args) { + System.out.println(getSalt(4)); + } +} \ No newline at end of file diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/VerifyCodeUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/VerifyCodeUtils.java new file mode 100644 index 0000000..03be2ec --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/VerifyCodeUtils.java @@ -0,0 +1,269 @@ +package com.shxy.xymanager_common.util; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Random; + +public class VerifyCodeUtils { + + //使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 + public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; + private static Random random = new Random(); + + + /** + * 使用系统默认字符源生成验证码 + * + * @param verifySize 验证码长度 + * @return + */ + public static String generateVerifyCode(int verifySize) { + return generateVerifyCode(verifySize, VERIFY_CODES); + } + + /** + * 使用指定源生成验证码 + * + * @param verifySize 验证码长度 + * @param sources 验证码字符源 + * @return + */ + public static String generateVerifyCode(int verifySize, String sources) { + if (sources == null || sources.length() == 0) { + sources = VERIFY_CODES; + } + int codesLen = sources.length(); + Random rand = new Random(System.currentTimeMillis()); + StringBuilder verifyCode = new StringBuilder(verifySize); + for (int i = 0; i < verifySize; i++) { + verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1))); + } + return verifyCode.toString(); + } + + /** + * 生成随机验证码文件,并返回验证码值 + * + * @param w + * @param h + * @param outputFile + * @param verifySize + * @return + * @throws IOException + */ + public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException { + String verifyCode = generateVerifyCode(verifySize); + outputImage(w, h, outputFile, verifyCode); + return verifyCode; + } + + /** + * 输出随机验证码图片流,并返回验证码值 + * + * @param w + * @param h + * @param os + * @param verifySize + * @return + * @throws IOException + */ + public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException { + String verifyCode = generateVerifyCode(verifySize); + outputImage(w, h, os, verifyCode); + return verifyCode; + } + + /** + * 生成指定验证码图像文件 + * + * @param w + * @param h + * @param outputFile + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, File outputFile, String code) throws IOException { + if (outputFile == null) { + return; + } + File dir = outputFile.getParentFile(); + if (!dir.exists()) { + dir.mkdirs(); + } + try { + outputFile.createNewFile(); + FileOutputStream fos = new FileOutputStream(outputFile); + outputImage(w, h, fos, code); + fos.close(); + } catch (IOException e) { + throw e; + } + } + + /** + * 输出指定验证码图片流 + * + * @param w + * @param h + * @param os + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, OutputStream os, String code) throws IOException { + int verifySize = code.length(); + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + Random rand = new Random(); + Graphics2D g2 = image.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + Color[] colors = new Color[5]; + Color[] colorSpaces = new Color[]{Color.WHITE, Color.CYAN, + Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, + Color.PINK, Color.YELLOW}; + float[] fractions = new float[colors.length]; + for (int i = 0; i < colors.length; i++) { + colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; + fractions[i] = rand.nextFloat(); + } + Arrays.sort(fractions); + + g2.setColor(Color.GRAY);// 设置边框色 + g2.fillRect(0, 0, w, h); + + Color c = getRandColor(200, 250); + g2.setColor(c);// 设置背景色 + g2.fillRect(0, 2, w, h - 4); + + //绘制干扰线 + Random random = new Random(); + g2.setColor(getRandColor(160, 200));// 设置线条的颜色 + for (int i = 0; i < 20; i++) { + int x = random.nextInt(w - 1); + int y = random.nextInt(h - 1); + int xl = random.nextInt(6) + 1; + int yl = random.nextInt(12) + 1; + g2.drawLine(x, y, x + xl + 40, y + yl + 20); + } + + // 添加噪点 + float yawpRate = 0.05f;// 噪声率 + int area = (int) (yawpRate * w * h); + for (int i = 0; i < area; i++) { + int x = random.nextInt(w); + int y = random.nextInt(h); + int rgb = getRandomIntColor(); + image.setRGB(x, y, rgb); + } + + shear(g2, w, h, c);// 使图片扭曲 + + g2.setColor(getRandColor(100, 160)); + int fontSize = h - 4; + Font font = new Font("Algerian", Font.ITALIC, fontSize); + g2.setFont(font); + char[] chars = code.toCharArray(); + for (int i = 0; i < verifySize; i++) { + AffineTransform affine = new AffineTransform(); + affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize / 2, h / 2); + g2.setTransform(affine); + g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); + } + + g2.dispose(); + ImageIO.write(image, "jpg", os); + } + + private static Color getRandColor(int fc, int bc) { + if (fc > 255) + fc = 255; + if (bc > 255) + bc = 255; + int r = fc + random.nextInt(bc - fc); + int g = fc + random.nextInt(bc - fc); + int b = fc + random.nextInt(bc - fc); + return new Color(r, g, b); + } + + private static int getRandomIntColor() { + int[] rgb = getRandomRgb(); + int color = 0; + for (int c : rgb) { + color = color << 8; + color = color | c; + } + return color; + } + + private static int[] getRandomRgb() { + int[] rgb = new int[3]; + for (int i = 0; i < 3; i++) { + rgb[i] = random.nextInt(255); + } + return rgb; + } + + private static void shear(Graphics g, int w1, int h1, Color color) { + shearX(g, w1, h1, color); + shearY(g, w1, h1, color); + } + + private static void shearX(Graphics g, int w1, int h1, Color color) { + + int period = random.nextInt(2); + + boolean borderGap = true; + int frames = 1; + int phase = random.nextInt(2); + + for (int i = 0; i < h1; i++) { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + + (6.2831853071795862D * (double) phase) + / (double) frames); + g.copyArea(0, i, w1, 1, (int) d, 0); + if (borderGap) { + g.setColor(color); + g.drawLine((int) d, i, 0, i); + g.drawLine((int) d + w1, i, w1, i); + } + } + + } + + private static void shearY(Graphics g, int w1, int h1, Color color) { + + int period = random.nextInt(40) + 10; // 50; + + boolean borderGap = true; + int frames = 20; + int phase = 7; + for (int i = 0; i < w1; i++) { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + + (6.2831853071795862D * (double) phase) + / (double) frames); + g.copyArea(i, 0, 1, h1, 0, (int) d); + if (borderGap) { + g.setColor(color); + g.drawLine(i, (int) d, i, 0); + g.drawLine(i, (int) d + h1, i, h1); + } + + } + + } + + public static void main(String[] args) throws IOException { + //获取验证码 + String s = generateVerifyCode(4); + //将验证码放入图片中 + outputImage(260, 60, new File("/Users/chenyannan/Desktop/安工资料/aa.jpg"), s); + System.out.println(s); + } +} \ No newline at end of file diff --git a/xymanager_dao/src/main/resources/generatorConfig.xml b/xymanager_dao/src/main/resources/generatorConfig.xml index 488c64b..9d8673e 100644 --- a/xymanager_dao/src/main/resources/generatorConfig.xml +++ b/xymanager_dao/src/main/resources/generatorConfig.xml @@ -152,9 +152,47 @@ - + + + + + + + + +
+ +
+ + +
+ + +
+ + + +
+ diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/UserServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/UserServiceImpl.java deleted file mode 100644 index 7da8aaa..0000000 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/UserServiceImpl.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.shxy.xymanager_service.impl; - -import com.shxy.xymanager_common.dto.RoleAndPermsDto; -import com.shxy.xymanager_common.dto.UserAndRoleDto; -import com.shxy.xymanager_common.entity.Perms; -import com.shxy.xymanager_dao.dao.UserDao; -import com.shxy.xymanager_service.service.UserService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; - -/** - * 用户管理实现层 - */ -@Service -@Slf4j -public class UserServiceImpl implements UserService { - - @Autowired - UserDao userDao; - - - /** - * 根据用户名查找用户角色 - * @param username - * @return - */ - @Override - public UserAndRoleDto findRoleByUsername(String username) { - return userDao.findRolesByUserName(username); - } - - @Override - public RoleAndPermsDto findPermByRoleId(Integer id) { - return userDao.findPermByRoleId(id); - } - - @Override - public List findPermsByRoleId2(String id) { - return null; - } -} diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/UserService.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/UserService.java deleted file mode 100644 index 0ebdf4b..0000000 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/UserService.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.shxy.xymanager_service.service; - -import com.shxy.xymanager_common.dto.RoleAndPermsDto; -import com.shxy.xymanager_common.dto.UserAndRoleDto; -import com.shxy.xymanager_common.entity.Perms; - -import java.util.List; - -/** - * 用户管理接口 - * - * @author 晶晶 - */ -public interface UserService { - - /** - * 根据用户名查用户角色 - * @param username - * @return - */ - UserAndRoleDto findRoleByUsername(String username); - - //根据角色id查询权限集合 - RoleAndPermsDto findPermByRoleId(Integer id); - - //根据角色id查询权限集合 - List findPermsByRoleId2(String id); - -}