首页
关于
留言
统计
友链
壁纸
影视
留言找电影
Search
1
java jdk17版本使用cglib报错问题解决
320 阅读
2
在Java中修复json数据,json格式不正确,如何在Java中修复不正确的json
116 阅读
3
Java实现双链表插入排序~渡星河全网首发
106 阅读
4
Java打印某年某月的日历~不调用函数
76 阅读
5
Java中判断是否是闰年
70 阅读
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
登录
/
注册
Search
标签搜索
java
java作业
恋爱
动漫
3A大作
独行月球
电影分享
总之就是非常可爱
JavaScript
office
破解
mysql
vue
java打包
跨域
tomcat解决乱码
bug解决
tomcat
vscode
渡星河
累计撰写
94
篇文章
累计收到
30
条评论
首页
栏目
代码笔记
Java
css
Javascript
数据库
安卓开发
Java 功能实例
Java 封装
我的日常
影音分享
文案
恋爱问答
资源分享
电脑游戏
实用APP
页面
关于
留言
统计
友链
壁纸
影视
留言找电影
搜索到
20
篇与
的结果
2023-04-13
Java封装删除指定redis前缀key
redis删除指定前缀key无语了家人们,今天写项目想通过通配符删除redis缓存的key,没有用啊我本来想使用命令 del wang* 去删除前缀是wang的可以,结果不可以啊含泪封装一个删除指定前缀的key的java类 package com.galaxy.empvue.utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.Set; @Component public class RedisUtils { @Autowired private RedisTemplate<String, Object> redisTemplate; public void deleteByPrefix(String prefix) { redisTemplate.execute((RedisCallback<Void>) connection -> { Set<byte[]> keys = connection.keys((prefix + "*").getBytes()); assert keys != null; if (!keys.isEmpty()) { connection.del(keys.toArray(new byte[0][])); } return null; }); } } 直接自动装配到你要用的类就行了
2023年04月13日
7 阅读
0 评论
-1 点赞
2023-03-24
mybatis-plus代码生成使用(springboot中使用版本)
代码在test中调用,在test文件夹里面创建类package com.pms.pms; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import org.junit.jupiter.api.Test; public class CodeTest { @Test public void run() { // 1、创建代码生成器对象 AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); //指定生成的代码和包存放的地方 gc.setOutputDir("E:\\SSM\\pms" + "/src/main/java"); gc.setAuthor("duGalaxy");//作者 gc.setOpen(false); //生成后是否打开资源管理器 gc.setFileOverride(false); // 不覆盖之前的 gc.setServiceName("%sService");//生成的业务层接口不需要前面有一个 gc.setIdType(IdType.ASSIGN_ID);//主键策略的设置(字符串类型的数字) gc.setDateType(DateType.ONLY_DATE);//设置日期类型 gc.setSwagger2(true);//是否开启swagger配置 mpg.setGlobalConfig(gc); // 3、数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://localhost:3306/pms?serverTimezone=GMT%2B8"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("500423"); dsc.setDbType(DbType.MYSQL); mpg.setDataSource(dsc); // 4、包配置 PackageConfig pc = new PackageConfig(); pc.setParent("cn.muau.pms");//指定父包名称 // pc.setModuleName("uservice"); //指定模块名称(在分布式的项目中才会指定) pc.setController("controller");//控制层报名 pc.setEntity("entity");//实体类包名 pc.setService("service");//业务层包名 pc.setMapper("mapper");//dao层包名 mpg.setPackageInfo(pc); // 5、策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setInclude("t_developer");//数表的名称(就是指定要为哪一张数据表生成代码和包) //数据表映射到实体类的命名策略,比如数据表为t_emp--->tEmp strategy.setNaming(NamingStrategy.underline_to_camel); //生成实体类的时候去掉表的前缀(比如表名为t_emp_info--->empInfo) // strategy.setTablePrefix(pc.getModuleName() + "_"); strategy.setTablePrefix("t_"); //生成实体类的时候的字段的命名策略(遵循驼峰原则比如 e_name--->eName) strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true);//开启lombok插件的使用 strategy.setRestControllerStyle(true);//restful风格的api配置 strategy.setControllerMappingHyphenStyle(true);// url中驼峰转字符 mpg.setStrategy(strategy); // 6、执行 mpg.execute(); } } pom文件<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.21.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.21.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <!-- mybatis-plus依賴 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.17</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2023年03月24日
12 阅读
0 评论
0 点赞
2023-02-17
JavaServlrt实现多表查询,通过用户表,用户信息表
va Servlet 可以通过 JDBC 来操作数据库,实现多表查询。下面提供一个例子,通过用户表(User)和用户信息表(UserInfo)进行多表查询,返回符合条件的用户信息。import java.sql.*; import java.util.ArrayList; import java.util.List; public class UserDAO { private Connection connection; private String driverClass = "com.mysql.jdbc.Driver"; private String url = "jdbc:mysql://localhost:3306/test"; private String username = "root"; private String password = "password"; public UserDAO() throws Exception { Class.forName(driverClass); connection = DriverManager.getConnection(url, username, password); } public List<UserInfo> getUserInfo(String name, int age) throws Exception { List<UserInfo> userInfos = new ArrayList<UserInfo>(); String sql = "SELECT * FROM User u JOIN UserInfo ui ON u.id = ui.user_id WHERE u.name=? AND u.age=?"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, name); statement.setInt(2, age); ResultSet rs = statement.executeQuery(); while (rs.next()) { UserInfo userInfo = new UserInfo(); userInfo.setId(rs.getInt("id")); userInfo.setUserId(rs.getInt("user_id")); userInfo.setEmail(rs.getString("email")); userInfo.setPhone(rs.getString("phone")); userInfos.add(userInfo); } rs.close(); statement.close(); return userInfos; } public void close() throws Exception { connection.close(); } } 上面的例子中,UserDAO 类通过 JDBC 来连接 MySQL 数据库。getUserInfo 方法可以接收用户名和年龄两个参数,查询符合条件的用户信息,返回一个用户信息列表。需要注意的是,在 getUserInfo 方法中,通过 u JOIN UserInfo ui ON u.id = ui.user_id 的方式进行了多表查询。这个 SQL 语句的含义是,在 User 表和 UserInfo 表中,如果两个表中的 user_id 和 id 字段相同,就把两个表中的数据拼接在一起返回。如果需要对数据库进行插入操作,可以使用类似的方法进行操作,同时开启事务,如下所示: public void addUserInfo(UserInfo userInfo) throws Exception { connection.setAutoCommit(false); String sql = "INSERT INTO UserInfo (user_id, email, phone) VALUES (?, ?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1, userInfo.getUserId()); statement.setString(2, userInfo.getEmail()); statement.setString(3, userInfo.getPhone()); statement.executeUpdate(); connection.commit(); statement.close(); } 上面的例子中,addUserInfo 方法会将一个用户信息对象插入到 UserInfo 表中。在这个过程中,需要开启事务,将多个 SQL 操作封装在一个事务中,保证数据的一致性。在本例中,通过 connection.setAutoCommit(false) 方法将自动提交关闭,然后通过 connection.commit() 方法手动提交事务,确保数据插入操作执行成功后才进行提交。
2023年02月17日
11 阅读
0 评论
0 点赞
2023-02-16
javaServlet封装AES的加密类
Java Servlet 可以封装常用的加密类,以实现对用户数据的保护。以下是一个简单的加密类封装示例:import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class EncryptionUtils { // 算法名 private static final String ALGORITHM_NAME = "AES"; // 填充方式 private static final String ALGORITHM_PADDING = "AES/CBC/PKCS5Padding"; // 加密密钥(长度必须是16位) private static final String ENCRYPTION_KEY = "0123456789abcdef"; // 初始向量(长度必须是16位) private static final String IV = "0123456789abcdef"; // 加密字符串 public static String encrypt(String plaintext) { try { SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME); Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8")); cipher.init(Cipher.ENCRYPT_MODE, key, ivParameterSpec); byte[] encrypted = cipher.doFinal(plaintext.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(encrypted); } catch (Exception e) { e.printStackTrace(); } return null; } // 解密字符串 public static String decrypt(String ciphertext) { try { SecretKeySpec key = new SecretKeySpec(ENCRYPTION_KEY.getBytes("UTF-8"), ALGORITHM_NAME); Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING); IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes("UTF-8")); cipher.init(Cipher.DECRYPT_MODE, key, ivParameterSpec); byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(ciphertext)); return new String(decrypted, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return null; } } 这个类中使用了 Java 中提供的加密类库,实现了对字符串的加密和解密操作。加密方法使用 AES 算法对字符串进行加密,加密后的密文使用 Base64 编码。解密方法则是先使用 Base64 解码,再使用 AES 算法进行解密,最后将解密后的字节数组转换为字符串。在 Servlet 中使用这个类只需要导入这个类,然后就可以使用其中的加密和解密方法了。例如String plaintext = "Hello, world!"; String ciphertext = EncryptionUtils.encrypt(plaintext); System.out.println(ciphertext); // 输出加密后的字符串 String decrypted = EncryptionUtils.decrypt(ciphertext); System.out.println(decrypted); // 输出解密后的字符串 注意:这个示例中的加密密钥和初始向量都是写死的,实际应用中应该根据具体情况进行修改,不能直接使用这个示例中的值。
2023年02月16日
12 阅读
0 评论
1 点赞
2023-02-16
javaServlet实现cookie加session登录
实现思路{card-describe title="思路"} Java Servlet 中也可以使用 Cookie 和 Session 结合的方式实现登录功能。具体实现方式是,在用户成功登录时,为用户创建一个包含用户信息的 Cookie,并将该 Cookie 的值存储在 Session 中,然后在用户的后续请求中,从 Cookie 中读取用户信息,并通过 Session 进行验证。 {/card-describe}以下是一个使用 Cookie 和 Session 结合实现登录的 Java Servlet 代码示例:@WebServlet("/login") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if ("admin".equals(username) && "password".equals(password)) { HttpSession session = request.getSession(); session.setAttribute("loggedIn", true); session.setAttribute("username", username); // 创建 Cookie Cookie cookie = new Cookie("user", username); cookie.setMaxAge(3600); response.addCookie(cookie); response.sendRedirect("welcome.jsp"); } else { response.sendRedirect("login.jsp"); } } } {card-describe title="代码解释"} 在上面的代码中,我们首先获取用户提交的用户名和密码,然后判断是否正确。如果正确,我们就创建一个 HttpSession 对象,并将登录状态和用户名存储在其中。然后,我们创建一个名为 "user" 的 Cookie,并将用户名作为其值,将 Cookie 的过期时间设置为 3600 秒。最后,我们将用户重定向到一个欢迎页面。如果用户名和密码不正确,我们将用户重定向回登录页面。 {/card-describe}在欢迎页面或其他需要登录的页面中,我们可以使用如下代码来检查用户是否已经登录:HttpSession session = request.getSession(); Cookie[] cookies = request.getCookies(); if (session.getAttribute("loggedIn") != null && (Boolean) session.getAttribute("loggedIn")) { // 用户已经登录 String username = (String) session.getAttribute("username"); // ... } else if (cookies != null) { // 从 Cookie 中读取用户名 for (Cookie cookie : cookies) { if (cookie.getName().equals("user")) { String username = cookie.getValue(); // 将用户名存储在 Session 中,用于验证登录状态 session.setAttribute("loggedIn", true); session.setAttribute("username", username); break; } } } if (session.getAttribute("loggedIn") != null && (Boolean) session.getAttribute("loggedIn")) { // 用户已经登录 String username = (String) session.getAttribute("username"); // ... } else { // 用户未登录,重定向到登录页面 response.sendRedirect("login.jsp"); } {card-describe title="解释"} 在上面的代码中,我们首先获取 HttpSession 对象,然后检查其中是否包含一个名为 "loggedIn" 的属性,并且其值为 true。如果是,我们就可以确定用户已经登录,然后可以获取用户名等信息进行处理。如果没有登录,则从请求中获取 Cookie,并从中读取用户名,然后将用户名存储在 Session 中,用于验证登录状态。最后,我们再次检查 Session 中的 "loggedIn" 属性,如果用户已经登录,就进行相应的处理,否则将用户重定向回登录页面。 {/card-describe}在使用 Cookie 和 Session 时,应该注意避免一些安全漏洞
2023年02月16日
8 阅读
0 评论
0 点赞
1
2
...
4