diff --git a/shiro-quickstart/src/test/java/test/LoginShiro.java b/shiro-quickstart/src/test/java/test/LoginShiro.java index 6b02109..8582a34 100644 --- a/shiro-quickstart/src/test/java/test/LoginShiro.java +++ b/shiro-quickstart/src/test/java/test/LoginShiro.java @@ -20,6 +20,9 @@ import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** *

@@ -42,7 +45,6 @@ public class LoginShiro { Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); session.setAttribute("key", "value"); - String key = (String) session.getAttribute("key"); System.out.println("key 值:" + key); @@ -51,9 +53,21 @@ public class LoginShiro { UsernamePasswordToken token = new UsernamePasswordToken("system", "system"); try { currentUser.login(token); + new Thread(() -> { System.out.println("登陆成功,登录用户"+SecurityUtils.getSubject().getPrincipals()); }).start(); + +// ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, +// 10L, TimeUnit.MILLISECONDS, +// new LinkedBlockingQueue()); +// +// for (int i = 0; i < 10; i++) { +// executor.execute(()->{ +// System.out.println(SecurityUtils.getSubject().getPrincipals()); +// }); +// } + } catch (UnknownAccountException uae) { log.info("无此用户,用户名: " + token.getPrincipal()); } catch (IncorrectCredentialsException ice) { diff --git a/shiro-quickstart/src/test/java/test/thread/TestThreadLocal.java b/shiro-quickstart/src/test/java/test/thread/TestThreadLocal.java new file mode 100644 index 0000000..8a0e12a --- /dev/null +++ b/shiro-quickstart/src/test/java/test/thread/TestThreadLocal.java @@ -0,0 +1,69 @@ +package test.thread; + +import org.apache.shiro.SecurityUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.*; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-11 22:40 + */ +public class TestThreadLocal { + static ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 2, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue()); + + + public static void main(String[] args) { + ThreadLocal> threadLocal = new InheritableThreadLocalMap<>(); + for (int i = 0; i < 10; i++) { + Map map = new HashMap<>(); + map.put("key", i); + threadLocal.set(map); + executor.execute(()->{ + System.out.println(threadLocal.get().get("key")); + }); + } + } + + public static void testInThreadLocal(){ + ThreadLocal> threadLocal = new InheritableThreadLocalMap<>(); + Map map = new HashMap<>(); + map.put("key", "value"); + threadLocal.set(map); + new Thread(() -> { + System.out.println(threadLocal.get().get("key")); + }, "input thread name").start(); + } + public static void testThreadLocal(){ + ThreadLocal threadLocal = new ThreadLocal<>(); + threadLocal.set("测试threadLocal"); + new Thread(() -> { + System.out.println(threadLocal.get()); + }, "input thread name").start(); + + } + + private static final class InheritableThreadLocalMap> extends InheritableThreadLocal> { + + /** + * This implementation was added to address a + * + * user-reported issue. + * @param parentValue the parent value, a HashMap as defined in the {@link #initialValue()} method. + * @return the HashMap to be used by any parent-spawned child threads (a clone of the parent HashMap). + */ + @SuppressWarnings({"unchecked"}) + protected Map childValue(Map parentValue) { + if (parentValue != null) { + return (Map) ((HashMap) parentValue).clone(); + } else { + return null; + } + } + } +} diff --git a/shiro-sprinboot-proxy/pom.xml b/shiro-sprinboot-proxy/pom.xml index db6d9d3..d9b0d3d 100644 --- a/shiro-sprinboot-proxy/pom.xml +++ b/shiro-sprinboot-proxy/pom.xml @@ -51,6 +51,24 @@ 2.6 compile + + + org.apache.shiro + shiro-core + + + + com.baomidou + mybatis-plus-boot-starter + + + com.baomidou + mybatis-plus-generator + + + mysql + mysql-connector-java + diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/ProxyApplication.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/ProxyApplication.java index a4e063a..8aaef79 100644 --- a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/ProxyApplication.java +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/ProxyApplication.java @@ -1,10 +1,20 @@ package com.bjmashibing.shiro; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.aop.AopAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.transaction.annotation.EnableTransactionManagement; +@MapperScan(basePackages = {"com.bjmashibing.shiro.moduler.mapper"}) +//开启AopContext.currentProxy()增强 +@EnableAspectJAutoProxy(exposeProxy=true) +//开启springboot jdk动态代理方法 +//@SpringBootApplication(exclude = { AopAutoConfiguration.class}) +//@EnableTransactionManagement @SpringBootApplication public class ProxyApplication extends SpringBootServletInitializer { public static void main(String[] args) { diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/controller/UserController.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/controller/UserController.java new file mode 100644 index 0000000..cfb7cfd --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/controller/UserController.java @@ -0,0 +1,23 @@ +package com.bjmashibing.shiro.moduler.controller; + + + +import org.springframework.web.bind.annotation.RestController; + +import java.io.Serializable; +import java.util.Collection; + +/** + *

+ * 用户信息表 前端控制器 + *

+ * + * @author 孙志强 + * @since 2020-04-13 + */ +@RestController +public class UserController { + + + +} diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/entity/User.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/entity/User.java new file mode 100644 index 0000000..c66d81c --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/entity/User.java @@ -0,0 +1,88 @@ +package com.bjmashibing.shiro.moduler.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 用户信息表 + *

+ * + * @author 孙志强 + * @since 2020-04-13 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("sys_user") +public class User implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 用户主键 + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 登录账户 + */ + private String username; + + /** + * 登录密码 + */ + private String password; + + /** + * 盐值,密码秘钥 + */ + private String secretkey; + + private Integer locked; + + /** + * 真实姓名 + */ + private String realName; + + /** + * 删除标记:0未删除,1删除 + */ + private Integer isDelete; + + /** + * 创建日期 + */ + private Date createTime; + + /** + * 创建用户 + */ + private String createUser; + + /** + * 修改日期 + */ + private Date updateUser; + + /** + * 修改用户 + */ + private Date updateTime; + + /** + * 时间戳 + */ + private Date ts; + + +} diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/mapper/UserMapper.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/mapper/UserMapper.java new file mode 100644 index 0000000..a912b56 --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/mapper/UserMapper.java @@ -0,0 +1,17 @@ +package com.bjmashibing.shiro.moduler.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.bjmashibing.shiro.moduler.entity.User; + +import java.util.List; + +/** + *

+ * 用户信息表 Mapper 接口 + *

+ * + * @author 孙志强 + * @since 2020-04-13 + */ +public interface UserMapper extends BaseMapper { +} diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/service/UserService.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/service/UserService.java new file mode 100644 index 0000000..769e184 --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/service/UserService.java @@ -0,0 +1,28 @@ +package com.bjmashibing.shiro.moduler.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.bjmashibing.shiro.moduler.entity.User; + +import java.util.List; + +/** + *

+ * 用户信息表 服务类 + *

+ * + * @author 孙志强 + * @since 2020-04-13 + */ +public interface UserService { + + void aspectj1(); + void aspectj2(); + + + + void parent(); + + void child(); + + +} diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/service/impl/UserServiceImpl.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..1e0839b --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/moduler/service/impl/UserServiceImpl.java @@ -0,0 +1,71 @@ +package com.bjmashibing.shiro.moduler.service.impl; + +import com.bjmashibing.shiro.moduler.entity.User; +import com.bjmashibing.shiro.moduler.mapper.UserMapper; +import com.bjmashibing.shiro.moduler.service.UserService; +import com.bjmashibing.shiro.proxy.SysLog; +import org.springframework.aop.config.AopConfigUtils; +import org.springframework.aop.framework.AopContext; +import org.springframework.aop.support.AopUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + *

+ * 用户信息表 服务实现类 + *

+ * + * @author 孙志强 + * @since 2020-04-13 + */ +@Service +public class UserServiceImpl implements UserService { + @Autowired + private UserMapper userMapper; + @SysLog + @Override + public void aspectj1() { + System.out.println("aspectj1 执行。。。"); + aspectj2(); + //如何解决单独调用,注解不生效的情况 +// ((UserService) AopContext.currentProxy()).aspectj2(); + } + @SysLog + @Override + public void aspectj2() { + System.out.println("aspectj2 执行。。。"); + } + + @Override + @Transactional + public void parent() { + User parent = new User(); + parent.setUsername("父亲"); + userMapper.insert(parent); + // 工作中有这样的需求 + //事务注解和异步注解都不生效 + ((UserService) AopContext.currentProxy()).child(); +// testPrivate(); + } + + @Override +// @Transactional(propagation = Propagation.REQUIRES_NEW) + @Transactional() //根本就没生效 + public void child() { + User child = new User(); + child.setUsername("儿子"); + userMapper.insert(child); + System.out.println(1 / 0); + } + @Transactional(propagation = Propagation.REQUIRES_NEW) + private void testPrivate(){ + User child = new User(); + child.setUsername("private"); + userMapper.insert(child); + System.out.println(1 / 0); + } +} diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AnnotationProcessorConfiguration.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AnnotationProcessorConfiguration.java index ba33d39..ca54f92 100644 --- a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AnnotationProcessorConfiguration.java +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AnnotationProcessorConfiguration.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.Configuration; * @author sunzhiqiang23 * @date 2019/9/27 13:42 */ -//@Configuration +@Configuration public class AnnotationProcessorConfiguration { @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){ diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AopLogMethodInterceptor.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AopLogMethodInterceptor.java index 189b945..4e38dca 100644 --- a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AopLogMethodInterceptor.java +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/AopLogMethodInterceptor.java @@ -14,10 +14,10 @@ public class AopLogMethodInterceptor implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { Method method = invocation.getThis().getClass().getDeclaredMethod(invocation.getMethod().getName(),invocation.getMethod().getParameterTypes()); -// SysLog sysLog = method.getAnnotation(SysLog.class); -// System.out.println("log: "+sysLog); - System.out.println("======"); - return invocation.proceed(); + Object proceed = invocation.proceed(); + System.out.println(invocation); + System.out.println("记录日志"); + return proceed; } diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/SysLogAspect.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/SysLogAspect.java index 193d9d4..ad7dab2 100644 --- a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/SysLogAspect.java +++ b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/proxy/SysLogAspect.java @@ -1,34 +1,21 @@ package com.bjmashibing.shiro.proxy; -import com.alibaba.fastjson.JSON; -import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; -import org.aspectj.lang.reflect.MethodSignature; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import sun.reflect.misc.MethodUtil; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.lang.reflect.Method; /** - * 系统日志,切面处理类 + *

系统日志,切面处理类

* - * @author chenshun - * @email sunlightcs@gmail.com - * @date 2017年3月8日 上午11:07:35 + * @author sunzhiqiang23 + * @date 2019/9/27 19:33 */ -@Aspect -@Component +//@Aspect +//@Component public class SysLogAspect { @Pointcut("@annotation(com.bjmashibing.shiro.proxy.SysLog)") @@ -41,7 +28,7 @@ public class SysLogAspect { Object result =null ; try { result = point.proceed(); - System.out.println("============="); + System.out.println("【记录日志】"); //执行时长(毫秒) }catch (Exception e){ e.printStackTrace(); diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/service/UserService.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/service/UserService.java deleted file mode 100644 index 20e76a1..0000000 --- a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/service/UserService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.bjmashibing.shiro.service; - -/** - *

- * - * @author sunzhiqiang23 - * @date 2020-06-06 17:40 - */ -public interface UserService { - int add(); - int select(); -} diff --git a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/service/UserServiceImpl.java b/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/service/UserServiceImpl.java deleted file mode 100644 index dd44733..0000000 --- a/shiro-sprinboot-proxy/src/main/java/com/bjmashibing/shiro/service/UserServiceImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.bjmashibing.shiro.service; - -import com.bjmashibing.shiro.proxy.SysLog; -import org.springframework.stereotype.Service; - -/** - *

- * - * @author sunzhiqiang23 - * @date 2020-06-06 17:41 - */ -@Service -public class UserServiceImpl implements UserService{ - @SysLog - @Override - public int add() { - System.out.println("添加用户"); - select(); - return 0; - } - @SysLog - @Override - public int select() { - System.out.println("查询用户"); - return 0; - } -} diff --git a/shiro-sprinboot-proxy/src/main/resources/application-db.yml b/shiro-sprinboot-proxy/src/main/resources/application-db.yml new file mode 100644 index 0000000..7cba1b1 --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/resources/application-db.yml @@ -0,0 +1,41 @@ +# DataSource Config +spring: + datasource: + username: root + password: admin + url: jdbc:mysql://localhost:3306/db_shiro?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false + driver-class-name: com.mysql.jdbc.Driver + + +#mybatis 插件 +mybatis-plus: + mapper-locations: classpath:mapper/**/*.xml + #实体扫描,多个package用逗号或者分号分隔 + typeAliasesPackage: com.bjmashibing.shiro.moduler.*.entity + global-config: + db-config: + #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; + # id-type: uuid + id-type: auto + # id-type: id_worker + #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" + field-strategy: 2 + #驼峰下划线转换 + db-column-underline: true + #刷新mapper 调试神器 + refresh-mapper: true + #数据库大写下划线转换 + #capital-mode: true + #序列接口实现类配置 + # key-generator: com.baomidou.springboot.xxx + #逻辑删除配置 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + #自定义填充策略接口实现 + # meta-object-handler: com.baomidou.springboot.xxx + #自定义SQL注入器 + # sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true \ No newline at end of file diff --git a/shiro-sprinboot-proxy/src/main/resources/application.yml b/shiro-sprinboot-proxy/src/main/resources/application.yml index 623d2e3..84c454c 100644 --- a/shiro-sprinboot-proxy/src/main/resources/application.yml +++ b/shiro-sprinboot-proxy/src/main/resources/application.yml @@ -6,6 +6,8 @@ server: min-spare-threads: 30 port: 80 spring: + profiles: + active: db mvc: static-path-pattern: /static/** freemarker: diff --git a/shiro-sprinboot-proxy/src/main/resources/logback-spring.xml b/shiro-sprinboot-proxy/src/main/resources/logback-spring.xml index 18e03ea..703c33c 100644 --- a/shiro-sprinboot-proxy/src/main/resources/logback-spring.xml +++ b/shiro-sprinboot-proxy/src/main/resources/logback-spring.xml @@ -5,4 +5,5 @@ + diff --git a/shiro-sprinboot-proxy/src/main/resources/mapper/UserMapper.xml b/shiro-sprinboot-proxy/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..5f41a30 --- /dev/null +++ b/shiro-sprinboot-proxy/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/UserServiceTest.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/UserServiceTest.java deleted file mode 100644 index 0adab23..0000000 --- a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/UserServiceTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.bjmashibing.shiro; - -import com.bjmashibing.shiro.service.UserService; -import com.bjmashibing.shiro.service.UserServiceImpl; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - *

- * - * @author sunzhiqiang23 - * @date 2020-06-06 17:43 - */ -@Slf4j -public class UserServiceTest extends ApplicationTests { - - @Autowired - private UserService userService; - @Test - public void add(){ - //userservice 真正运行的时候,是不是代理对象? - userService.add(); - - } -} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/mybatis/CodeGenerator.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/mybatis/CodeGenerator.java new file mode 100644 index 0000000..0b48231 --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/mybatis/CodeGenerator.java @@ -0,0 +1,87 @@ +package com.bjmashibing.shiro.mybatis; + +import com.baomidou.mybatisplus.annotation.DbType; +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.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; +import org.junit.jupiter.api.Test; + +/** + * 〈一句话功能简述〉
+ * 代码生成器测试 + * + * @author:孙志强 + * @create:2018-06-11 11:07 + * @Modified BY: + **/ + +public class CodeGenerator { + @Test + public void generateCode() { + String packageName = "com.bjmashibing.shiro.moduler.system"; + generateByTables( packageName, "sys_module","sys_role","sys_role_module_ref","sys_user","sys_user_role_ref"); + } + + private void generateByTables(boolean serviceNameStartWithI, String packageName, String... tableNames) { + GlobalConfig config = new GlobalConfig(); + String dbUrl = "jdbc:mysql://127.0.0.1:3306/db_shiro"; + DataSourceConfig dataSourceConfig = new DataSourceConfig(); + dataSourceConfig.setDbType(DbType.MYSQL) + .setUrl(dbUrl) + .setUsername("root") + .setPassword("admin") + .setDriverName("com.mysql.jdbc.Driver") + .setTypeConvert(new MySqlTypeConvert() { + @Override + public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) { + System.out.println("转换类型:" + fieldType); + //将数据库中datetime转换成date + if ( fieldType.toLowerCase().contains( "datetime" ) ) { + return DbColumnType.DATE; + } + if ( fieldType.toLowerCase().contains( "timestamp" ) ) { + return DbColumnType.DATE; + } + return (DbColumnType) super.processTypeConvert(globalConfig, fieldType); + } + }); + StrategyConfig strategyConfig = new StrategyConfig(); + strategyConfig + .setCapitalMode(true) + .setEntityLombokModel(true) + .setNaming(NamingStrategy.underline_to_camel) + .setInclude(tableNames).setTablePrefix("base_","test_","sys_","flow_","tbl_","jd_");//修改替换成你需要的表名,多个表名传数组 + config.setActiveRecord(false) + .setAuthor("孙志强") + .setEnableCache(false) + .setOutputDir("D:\\export") + .setFileOverride(true); + //user -> UserService, 设置成true: user -> IUserService + if (!serviceNameStartWithI) { + config.setServiceName("%sService"); + } + new AutoGenerator() + .setTemplateEngine(new FreemarkerTemplateEngine()) + .setGlobalConfig(config) + .setDataSource(dataSourceConfig) + .setStrategy(strategyConfig) + .setPackageInfo( + new PackageConfig() + .setParent(packageName) + .setController("controller") + .setEntity("entity") + ).execute(); + } + + private void generateByTables(String packageName, String... tableNames) { + generateByTables(false, packageName, tableNames); + } + + +} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/builder/SubjectBuilder.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/builder/SubjectBuilder.java new file mode 100644 index 0000000..e3bc124 --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/builder/SubjectBuilder.java @@ -0,0 +1,49 @@ +package com.bjmashibing.shiro.patterns.builder; + +import java.util.Date; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-13 17:28 + */ +public class SubjectBuilder { + private int id = 1; + private String firstname = "first"; + private String lastname = "last"; + private Date birthdate = new Date(); + private String street = "street"; + + public SubjectBuilder(int id, String firstname, String lastname, Date birthdate, String street) { + this.id = id; + this.firstname = firstname; + this.lastname = lastname; + this.birthdate = birthdate; + this.street = street; + } + + public SubjectBuilder Build() { + return new SubjectBuilder(id, firstname, lastname, birthdate, street); + } + + public SubjectBuilder WithFirstName(String firstname) { + this.firstname = firstname; + return this; + } + + public SubjectBuilder WithLastName(String lastname) { + this.lastname = lastname; + return this; + } + + public SubjectBuilder WithBirthDate(Date birthdate) { + this.birthdate = birthdate; + return this; + } + + public SubjectBuilder WithStreet(String street) { + this.street = street; + return this; + } +} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/builder/TestSubjectBuilder.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/builder/TestSubjectBuilder.java new file mode 100644 index 0000000..6680cf2 --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/builder/TestSubjectBuilder.java @@ -0,0 +1,22 @@ +package com.bjmashibing.shiro.patterns.builder; + +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.subject.Subject; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-13 17:36 + */ +public class TestSubjectBuilder { + public static void main(String[] args) { + SecurityManager securityManager = new DefaultSecurityManager(); + Subject subject1 = new Subject.Builder(securityManager).authenticated(false).buildSubject(); + Subject subject2 = new Subject.Builder(securityManager).authenticated(true).buildSubject(); + System.out.println(subject1.isAuthenticated()); + System.out.println(subject2.isAuthenticated()); + + } +} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/Client.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/Client.java similarity index 95% rename from shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/Client.java rename to shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/Client.java index 0d557fa..31ea31e 100644 --- a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/Client.java +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/Client.java @@ -1,4 +1,4 @@ -package com.bjmashibing.shiro.proxy; +package com.bjmashibing.shiro.patterns.proxy; import org.junit.jupiter.api.Test; import org.springframework.cglib.proxy.Enhancer; diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogInvocationHandler.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogInvocationHandler.java similarity index 94% rename from shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogInvocationHandler.java rename to shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogInvocationHandler.java index 0109f7c..4bb460f 100644 --- a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogInvocationHandler.java +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogInvocationHandler.java @@ -1,4 +1,4 @@ -package com.bjmashibing.shiro.proxy; +package com.bjmashibing.shiro.patterns.proxy; import org.springframework.aop.interceptor.PerformanceMonitorInterceptor; diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogService.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogService.java similarity index 72% rename from shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogService.java rename to shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogService.java index 2cea9f3..20de0df 100644 --- a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogService.java +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogService.java @@ -1,4 +1,4 @@ -package com.bjmashibing.shiro.proxy; +package com.bjmashibing.shiro.patterns.proxy; /** *

diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogServiceImpl.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogServiceImpl.java similarity index 82% rename from shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogServiceImpl.java rename to shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogServiceImpl.java index 4d21a3a..bfaad54 100644 --- a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/LogServiceImpl.java +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/LogServiceImpl.java @@ -1,4 +1,4 @@ -package com.bjmashibing.shiro.proxy; +package com.bjmashibing.shiro.patterns.proxy; /** *

diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/MataspaceOOMTest.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/MataspaceOOMTest.java similarity index 96% rename from shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/MataspaceOOMTest.java rename to shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/MataspaceOOMTest.java index 5d2b0a7..247e355 100644 --- a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/proxy/MataspaceOOMTest.java +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/MataspaceOOMTest.java @@ -1,4 +1,4 @@ -package com.bjmashibing.shiro.proxy; +package com.bjmashibing.shiro.patterns.proxy; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/AnnotationTest.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/AnnotationTest.java new file mode 100644 index 0000000..7dd5daf --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/AnnotationTest.java @@ -0,0 +1,29 @@ +package com.bjmashibing.shiro.patterns.proxy.springaop; + +import com.bjmashibing.shiro.ApplicationTests; +import com.bjmashibing.shiro.moduler.service.UserService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.Resource; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-09 20:41 + */ +public class AnnotationTest extends ApplicationTests { + + @Autowired + private UserService userService; + @Test + public void testAspectOnly(){ + userService.aspectj2(); + userService.aspectj2(); + } + @Test + public void testAspectMany(){ + userService.aspectj1(); + } +} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/BeforeAdvice.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/BeforeAdvice.java new file mode 100644 index 0000000..3bce6ae --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/BeforeAdvice.java @@ -0,0 +1,18 @@ +package com.bjmashibing.shiro.patterns.proxy.springaop; + +import org.springframework.aop.MethodBeforeAdvice; + +import java.lang.reflect.Method; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-13 14:48 + */ +public class BeforeAdvice implements MethodBeforeAdvice{ + @Override + public void before(Method method, Object[] objects, Object o) throws Throwable { + System.out.println("代理方法执行:"+method.getName()); + } +} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/SpringAdviceTest.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/SpringAdviceTest.java new file mode 100644 index 0000000..0759110 --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/SpringAdviceTest.java @@ -0,0 +1,27 @@ +package com.bjmashibing.shiro.patterns.proxy.springaop; + +import com.bjmashibing.shiro.moduler.service.UserService; +import com.bjmashibing.shiro.moduler.service.impl.UserServiceImpl; +import org.junit.jupiter.api.Test; +import org.springframework.aop.framework.ProxyFactory; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-13 14:47 + */ +public class SpringAdviceTest { + @Test + public void testAdvice() { + UserService target = new UserServiceImpl(); + BeforeAdvice beforeAdvice = new BeforeAdvice(); + ProxyFactory proxyFactory = new ProxyFactory(); + proxyFactory.setTarget(target); + proxyFactory.addAdvice(beforeAdvice); + + UserService proxy = (UserService) proxyFactory.getProxy(); + proxy.aspectj1(); + + } +} diff --git a/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/UserServiceTest.java b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/UserServiceTest.java new file mode 100644 index 0000000..d7d151d --- /dev/null +++ b/shiro-sprinboot-proxy/src/test/java/com/bjmashibing/shiro/patterns/proxy/springaop/UserServiceTest.java @@ -0,0 +1,22 @@ +package com.bjmashibing.shiro.patterns.proxy.springaop; + +import com.bjmashibing.shiro.ApplicationTests; +import com.bjmashibing.shiro.moduler.service.UserService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +/** + *

+ * + * @author sunzhiqiang23 + * @date 2020-06-09 21:45 + */ +public class UserServiceTest extends ApplicationTests { + @Autowired + private UserService userService; + @Test + public void test(){ + userService.parent(); + } + +} diff --git a/shiro-springboot-cas-taobao-9004/src/main/java/com/bjmashibing/shiro/moduler/system/controller/UserController.java b/shiro-springboot-cas-taobao-9004/src/main/java/com/bjmashibing/shiro/moduler/system/controller/UserController.java index f2349bc..d6c910d 100644 --- a/shiro-springboot-cas-taobao-9004/src/main/java/com/bjmashibing/shiro/moduler/system/controller/UserController.java +++ b/shiro-springboot-cas-taobao-9004/src/main/java/com/bjmashibing/shiro/moduler/system/controller/UserController.java @@ -41,6 +41,7 @@ public class UserController { User user = ShiroUtils.getUser(); ModelAndView mv = new ModelAndView("/user"); mv.addObject("user", user); + return mv; } diff --git a/资料/shiro-高级-孙志强.emmx b/资料/shiro-高级-孙志强.emmx new file mode 100644 index 0000000..20b0345 Binary files /dev/null and b/资料/shiro-高级-孙志强.emmx differ diff --git a/资料/shiro.emmx b/资料/shiro.emmx index 5d669b5..e8f40eb 100644 Binary files a/资料/shiro.emmx and b/资料/shiro.emmx differ