项目迭代之:创建时间覆盖优化、面向切面编程日志、权限管理、微服务
2020-08-04 20:27
656 查看
项目迭代之:创建时间覆盖优化、面向切面编程日志、权限管理、微服务
创建时间覆盖优化
一、在Util包下创建MyBeanUtils,实现对新闻进行更新时,不覆盖创建时间
package com.whut.demo.util; import org.springframework.beans.BeanWrapperImpl; import java.beans.PropertyDescriptor; import java.util.ArrayList; import java.util.List; public class MyBeanUtils { public static String [] getNullPropertyNames(Object source){ BeanWrapperImpl beanWrapper = new BeanWrapperImpl(source); PropertyDescriptor[] pds = beanWrapper.getPropertyDescriptors(); List<String> nullPropertyNames = new ArrayList<>(); for (PropertyDescriptor pd : pds) { String propertyName = pd.getName(); if (beanWrapper.getPropertyValue(propertyName)==null){ nullPropertyNames.add(propertyName); } } return nullPropertyNames.toArray(new String[nullPropertyNames.size()]); } }
二、在NewsServiceImpl中加入getNullPropertyNames方法
@Override public News updateNew(Long id, News news) { News news1 = newsRepository.findById(id).orElse(null); if (news1==null){ System.out.println("未获得更新对象"); } BeanUtils.copyProperties(news,news1, MyBeanUtils.getNullPropertyNames(news)); news1.setUpdateTime(new Date()); return newsRepository.save(news1); }
面向切面编程日志
一、创建aspect包,包中创建LogAspect类实现日志的切面编程
二、在类前面加入注解@Aspect,@Component
@Aspect @Component public class LogAspect {}
三、定义log方法,找到切入点
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Pointcut("execution(* com.guang.demo.web.*.*(..))") public void log(){ }
四、RequestLog
private class RequestLog{ private String url; private String ip; private String classMethod; private Object[] args; public RequestLog(String url, String ip, String classMethod, Object[] args) { this.url = url; this.ip = ip; this.classMethod = classMethod; this.args = args; } @Override public String toString() { return "RequestLog{" + "url='" + url + '\'' + ", ip='" + ip + '\'' + ", classMethod='" + classMethod + '\'' + ", args=" + Arrays.toString(args) + '}'; } }
五、定义在切点前后的日志打印方法
@Before("log()") public void doBefore(JoinPoint joinPoint){ //获取Request ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //获得url和ip.... String url = request.getRequestURL().toString(); String ip = request.getRemoteAddr(); String classMethod = joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName(); Object[] args = joinPoint.getArgs(); RequestLog requestLog = new RequestLog(url,ip,classMethod,args); logger.info("Request : {}",requestLog); logger.info("------------doBefore---------------"); } @After("log()") public void doAfter(){ logger.info("-------------doAfter--------------"); } @AfterReturning(returning = "result",pointcut = "log()") public void adAfterReturn(Object result){ logger.info("Result : {}",result); }
权限管理
一、修改ShiroConfiguration类中的shiroFilterFactoryBean方法
//配置shiro过滤工厂 @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager){ ShiroFilterFactoryBean shiroFilterFactory = new ShiroFilterFactoryBean(); shiroFilterFactory.setSecurityManager(securityManager); //通用配置 shiroFilterFactory.setLoginUrl("/admin"); shiroFilterFactory.setUnauthorizedUrl("/admin");//未授权 /* * key: 请求路径 * value: 过滤器类型 */ Map<String ,String > filterMap = new LinkedHashMap<>(); filterMap.put("/admin/news","perms[user-news]"); filterMap.put("/admin/types","perms[user-types]"); filterMap.put("/admin/tags","perms[user-tags]"); filterMap.put("/admin/login","anon"); filterMap.put("/admin/**","authc"); //设置过滤器 shiroFilterFactory.setFilterChainDefinitionMap(filterMap); return shiroFilterFactory; }
微服务
一、IDEA创建provider Module(Spring Cloud)步骤如下;
File→New→Module→Spring Initializr→Next→修改Group、Artifact、Java Version→Next→选择spring web、spring data JDBC、Mybatis framework、Mysql driver依赖→Next。
二、项目上级目录新建一个scloud文件夹,并修改root、location如下
三、修改pom.xml文件
添加依赖
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.4</version> </dependency>
四、修改application.properties文件为application.yml文件
五、po下创建User
@Table(name = "tb_user") public class User implements Serializable { private static final long serialVersionUID = -1203619350515120953L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String name; private Integer age; private Integer sex; private Date birthday; private Date created; private Date updated; public static long getSerialVersionUID() { return serialVersionUID; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } public Date getUpdated() { return updated; } public void setUpdated(Date updated) { this.updated = updated; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", name='" + name + '\'' + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + ", created=" + created + ", updated=" + updated + '}'; } }
六、Usermapper
@org.apache.ibatis.annotations.Mapper public interface UserMapper extends Mapper<User> { }
七、UserService
@Service public class UserService { @Autowired(required = false) private UserMapper userMapper; public User queryById(Long id){ return this.userMapper.selectByPrimaryKey(id); } }
八、UserController
@RestController @RequestMapping("user") public class UserController { @Autowired private UserService userService; @GetMapping("{id}") public User queryById(@PathVariable("id") Long id){ return this.userService.queryById(id); } }
九、修改application.yml文件
server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/sp_learn?useSSl=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: ****** driver-class-name: com.mysql.cj.jdbc.Driver mybatis: type-aliases-package: com.roger.service.provider.po
相关文章推荐
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程
- springAOP面向切面编程之日志记录功能
- Web项目中静态代理和动态代理为基础的面向切面编程AOP
- Nginx服务优化之隐藏版本号、修改用户与组、配置页面缓存与时间、日志分割以及设置连接超时
- Linux学习日志day2 part0——搭建NTP服务进行时间管理
- Spring AOP面向切面编程之日志记录
- mysql 配置 时间优化 创建用户赋予权限 自动备份 使用 优化
- spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
- 基于Spring.net、Nhibernate、Attribute的面向切面的权限管理实现
- git远程仓库创建及权限管理(一)单个项目
- SpringBoot面向切面编程AOP之日志拦截
- 程序员笔记|Spring IoC、面向切面编程、事务管理等Spring基本概念详解
- Spirng面向切面编程,xml方式,maven项目
- 一共81个,开源大数据处理工具汇总:查询引擎、流式计算、迭代计算、离线计算、键值存储、表格存储、文件存储、资源管理、日志收集系统、消息系统、分布式服务、集群管理、基础设施、搜索引擎、数据挖掘=监控
- C# 创建Windows服务项目,控制时间启用
- IT SpringAOP:足迹第十八步了解SpringAOP(如何使用面向切面开发权限认证、日志、事物)
- 创建数据库动态管理用户、角色、权限和资源服务
- 权限管理系统之项目框架搭建并集成日志、mybatis和分页
- 快速高效掌握企业级项目中的Spring面向切面编程应用,外带讲面试技巧