Java 全栈工程师进阶路线图

降龙十八掌-第一掌

  1. Java 基础语法

  2. Java 面向对象

  3. Java 常用类详解

  4. Java 异常机制

  5. Java 集合与数据结构

  6. Java IO

  7. Java 多线程

  8. Java 网络编程

  9. Java 注解+反射

  10. 23 种设计模式

  11. 正则表达式

  12. XML 解析/ JSON 解析

  13. Java 10、11、12 新特性

  14. AIO、BIO、NIO


WuYiLong原创大约 2 分钟javajava学习之路
关于springboot的@Transtional注解事务

关于springboot的@Transtional注解事务

前言

事务有四个特性:

  • 原子性 在一系列操作中,要么失败,要么成功,一个失败就全部失败,全部成功才是真正的成功
  • 隔离性 在每个事务单元中,每个单元都是相对独立的,互不影响
  • 一致性 在每个事务操作之前和操作之后,数据库的数据保持不变
  • 持久性 在操作完数据库后,数据已经存到磁盘里,即使电源关闭重启,数据依然存在 ps(以上仅个人理解的,有误请指正)

关于启如何启动@Transtional


WuYiLong原创大约 1 分钟javaTranstional
spring-security结合jwt和umi(react前端框架)企业级框架之前后端分离最佳实战(表单模式登录)(一)

前言

先向大家介绍几个框架的作用,提供官网地址,方便大家详细了解。

  • spring-security spring-security是一个功能强大、高度可定制的身份验证和访问控制框架。它实际上是保护基于Spring的应用程序的标准。 Spring Security是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring安全的真正威力在于它可以很容易地被扩展以满足定制需求
  • umi umi中文可发音为乌米,是可扩展的企业级前端应用框架。Umi 以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备,并以此进行功能扩展。然后配以生命周期完善的插件体系,覆盖从源码到构建产物的每个生命周期,支持各种功能扩展和业务需求。 Umi 是蚂蚁金服的底层前端框架,已直接或间接地服务了 3000+ 应用,包括 java、node、H5 无线、离线(Hybrid)应用、纯前端 assets 应用、CMS 应用等。他已经很好地服务了我们的内部用户,同时希望他也能服务好外部用户。
  • jwt Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

WuYiLong原创大约 3 分钟javasecurityumi
反射与动态代理的关系

先展示下mybatis的动态代理是怎样的

结合上一篇文章mybatis的启动过程

String resource = "mybatis.xml";
        InputStream resourceAsStream = Resources.getResourceAsStream(resource);

        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = factory.openSession();
// 不使用动态代理的情况下
try{
    List<User> userList = sqlSession.selectList("com.wyl.mybatis.dao.UserDao.getUserList");
            System.out.println("**********"+JSON.toJSON(userList));
        }finally {
            sqlSession.close();
        }
        
// 使用动态代理的情况下
 try{
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> userList = userDao.getUserList();
            System.out.println("**********"+JSON.toJSON(userList));
        }finally {
            sqlSession.close();
        }

WuYiLong原创大约 3 分钟java反射
spring-security-auth2的疑难杂症

进行IllegalStateException, UserDetailsService is required.

在进行走refresh_token的时候需要UserDetailsService

具体代码


   @Autowired
    private UserDetailsService userDetailsServiceBean;
    
    
 @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
       endpoints.tokenStore(tokenStore()).userDetailsService(userDetailsServiceBean);
    }

WuYiLong原创小于 1 分钟javasecurityauth2
spring-security-auth2

引入包

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>

WuYiLong原创大约 2 分钟javasecurityauth2
springboot结合shiro和jwt

项目结构

在这里插入图片描述

增加全局异常配置

/**
 * @Description GlobaException 全局的异常配置
 * @Author YiLong Wu
 * @Date 2020-03-11 22:28
 * @Version 1.0.0
 */
@RestControllerAdvice
public class GlobalException {

    /**
     * 处理用户名密码错误的异常
     * @return
     */
    @ExceptionHandler({UnknowUsenameAndPasswordException.class})
    @ResponseStatus
    public ResponseError unknowUsenameAndPasswordException() {
        return new ResponseError(HttpStatus.INTERNAL_SERVER_ERROR.value(),"用户名或密码错误");
    }

    /**
     * 处理权限不足的异常
     * @param e
     * @return
     */
    @ExceptionHandler(AuthorizationException.class)
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public ResponseError authorizationException(AuthorizationException e) {
        return new ResponseError(HttpStatus.FORBIDDEN.value(),"你没有权限访问");
    }

    /**
     * 处理token的异常
     * @return
     */
    @ExceptionHandler(InvalidTokenException.class)
    @ResponseStatus
    public ResponseError invalidTokenException() {
        return new ResponseError(HttpStatus.INTERNAL_SERVER_ERROR.value(),"不合法的token");
    }

    /**
     * 处理用户账户异常
     * @return
     */
    @ExceptionHandler(UnknownAccountException.class)
    @ResponseStatus
    public ResponseError unknownAccountException() {
        return new ResponseError(HttpStatus.INTERNAL_SERVER_ERROR.value(),"账户异常");
    }
}


WuYiLong原创大约 3 分钟javashirojwt
springboot结合shiro的demo

项目结构

在这里插入图片描述

如图所示,项目一共分为6层,分别是:

  • common公共层:主要是放置一些公共的模块
  • controller层:数据的表示层,俗称vo
  • dao层: 用于操作数据库,增删改查
  • Exception异常层:定义一些全局的异常,方便维护
  • model层: 数据库表的映射
  • shiro层:主要是配置shiro的授权和认证

WuYiLong原创大约 4 分钟javashiro
2