轻量级Web框架应用_第六周

回顾

上周我们主要做了两个事情:

  1. 利用shiro的认证器实现了一个登录接口
  2. 利用shiro的授权器实现了接口的访问限制

接口: 添加用户

还记得我们的addUser接口吗?

    @ApiImplicitParams({
           @ApiImplicitParam(name = "token", value = "鉴权用户",required = true,paramType = "header")
   })
   @GetMapping("/addUser")
   @RequiresRoles(value = {"admin","manager"},logical = Logical.OR)
   public ResultJson addUser(){
       return new ResultJson("200","成功",null);
   }

当时我们只是为了测试shiro对接口的权限管理, 仅仅只是简单的返回了个成功的信息而已, 并没有实际上的操作, 接下来我们就来完善这个接口吧!

实现步骤现在应该要很清晰了, 如果忘了可以看下图

mapper.java
mapper.xml
service
controller

一般来说, 在添加一个新用户的同时, 应该将用户的角色同时分配好, 那么参数应该有三个: (用户名, 密码, 角色名);
也就是说, 我们会涉及到三张表: 用户表, 用户角色表, 角色表
实现思路:

  1. 通过角色名在角色表中取得角色ID
  2. 在用户表中插入数据
  3. 通过用户名称来取得新增的用户ID
  4. 在用户角色表中插入用户对应的角色

UserRoleInfoMapper.java中新增一个根据角色名取得角色ID的方法

public interface RoleInfoMapper {
    int insert(RoleInfo record);
	//根据角色名取得角色ID
    int findRoleIDByRoleName(@Param("roleName") String roleName);
    
}

接着来到UserRoleInfoMapper.xml中添加对应的SQL语句

<select id="findRoleIDByRoleName" resultType="INTEGER">
    SELECT role_id
    FROM role_info
    WHERE role_name=#{roleName,jdbcType=VARCHAR}
    LIMIT 1
 </select>

这样我们查询角色ID的mappper就搞定了
然后我们来做第二步: 插入用户信息
插入用户信息的功能其实我们已经在测试类里写过一个testInsert
这段代码只要复制过来做个小小的改动就能用了! 这里就不赘述了
如果你还记得shiro的认证器的话, 其实通过用户名称来取得用户ID的mapper我们也有了:在UserInfoMapper中的findFirstByUserName
再看UserRoleMapperinsert方法, 用户角色表的插入mapper也写好了
那么只剩下service层的操作了, 无比简单
UserService中新增一个addUser的方法

public interface UserService {

    UserInfo getUserInfo(String userName);

    Set<String> getUserRoles(Integer userID);

    Set<String> getUserPermissions(Integer userID);

    void addUser(String userName,String password,String roleName);

}

UserServiceImpl中去实现它

    @Override
    public void addUser(String userName, String password, String roleName) throws Exception {
        //根据角色名称获取角色ID
        int roleID = roleInfoMapper.findRoleIDByRoleName(roleName);
        //插入用户记录
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName(userName);
        String salt = UUID.randomUUID().toString().replace("-","");
        userInfo.setSalt(salt);
        SimpleHash simpleHash = new SimpleHash(Md5Hash.ALGORITHM_NAME,password,salt,512);
        userInfo.setPassword(simpleHash.toString());
        userInfo.setCreateTime(new Date());
        userInfo.setUserState(Byte.parseByte("0"));
        userInfoMapper.insert(userInfo);
        //插入用户记录完成后根据用户名称获取用户ID
        UserInfo userInfoResult = userInfoMapper.findFirstByUserName(userName);
        //插入用户角色信息
        UserRole userRole = new UserRole();
        userRole.setRoleId(roleID);
        userRole.setUserId(userInfoResult.getUserId());
        userRoleMapper.insert(userRole);
    }

最后来到UserController完善添加用户的接口

  @PostMapping("/addUser")
  @RequiresRoles(value = {"admin","manager"},logical = Logical.OR)
      public ResultJson addUser(String userName,String password,String roleName){
          try {
              userService.addUser(userName,password,roleName);
              return new ResultJson("200","成功",null);
          }catch (Exception e){
              return new ResultJson("400","失败",e.toString());
          }
  }

接口: 删除用户

做了这么多遍了, 这个已经是无比简单了! ! ! 这里我很想写一个
不过还是来简单分析下吧. 后端接收到用户名, 通过用户名来删除用户信息;
那么试想下, 如果我现在直接去删除用户表的用户记录的话, 应该是删除不掉的, 因为在用户角色表中, 有我们的用户角色记录; 也就是说, 在删除用户信息之前, 应该先把用户角色的记录给删除掉
实现思路:

  1. 通过用户名来取得用户ID
  2. 通过用户ID来删除用户角色表中的对应信息
  3. 通过用户ID来删除用户表中的对应信息

对应到实际操作:

  1. 利用在UserInfoMapper中的findFirstByUserName取得用户ID
  2. UserRoleMapper中编写删除的方法和与其对应的SQL语句
  3. UserService层中编写对应的删除方法, 并在UserServiceImpl中实现它
  4. 最后在UserController中编写接口

自己试着写一下吧, 这里我就不贴上源码了

小钗有幸进入框架组做webapp的框架开发,并且基于框架的业务频道用于生产,各频道遍地开花,取得了不错的成绩, 但是,随着业务的快速迭代,框架为满足业务需求做了很多业务的事情,代码中也慢慢出现了坏味道,并且会发现有一些设计不合理的地方。 想在工作中做调整基本不可能,所依赖的第三方库搞掉也有很大的风险。这个时候小钗就萌生出开发出一套干净的轻webapp框架的想法,于是该框架便出现了。 诚然,此框架比不上Backbone,比不了anglarJS,甚至本身也会有一些问题,但是作为初步接触前端的同学,或者想在前端看到一些设计思想的同学,该框架还是有他一些优势。而且这个代码主要用于学习交流,我们带着看看不吃亏的想法,还是可以接触一下他的嘛!!!支持情况该框架是移动端框架,主要支持IOS6 、android4 框架发展第一期-MVC该框架第一期的目标是简单的webapp MVC的实现,现在也基本实现了,app支持hashChange与pushState两种方式做路由加载view,对此有兴趣的同学可以看看helloWord 关于app与页面级View的关系如下:第二期-通用工具框架第二期的想法是,完善本身一些通用的东西,比如UI组件或者简单的flip手势工具等,这里小钗不是专业的前端,就直接从线上将公司的CSS Down下来了,也用了他的Dom结构 但是,整个组件的扩展非常方便,有兴趣的同学看看UI一块的代码,UI的继承关系如下:第三期-ABTesting框架第三期目标是实现前端ABTesting方案第四期-ipad适配框架第四期的目标是一套业务代码,可以同时用于mobile与ipad第五期-Hybrid框架第五期目标是实现Hybrid交互适配,由于小钗本身不懂native开发所以此方案要靠后随机期-疑难杂症框架还会单开一个频道做一些疑难杂症处理,比如: ① fixed问题 ② 区域滚动问题 ③ app唤醒 ④ History路径问题等更多信息DEMO想简单看看demo的朋友请到:http://yexiaochai.github.io/blade/ 标签:blade​
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值