SSM05日志业务处理

这篇博客主要介绍了SSM框架下如何处理用户、角色和权限的关联查询,动态用户授权,以及如何实现日志功能。内容涵盖查询用户信息、用户授权的数据库加载、权限控制以及日志的AOP操作。特别强调了从Session获取用户名的方法和开启SpEL表达式的重要性。
摘要由CSDN通过智能技术生成

SSM练习 第5天

  • 查询用户/角色/权限信息

  • 用户动态授权

  • 获取用户名

  • 用户授权页面权限控制和后台权限控制

  • 系统日志

    重点:获取用户名实现方法,AOP实现日志操作。

第1章 用户/角色/权限信息关联查询

1.1 查询用户实现的效果

通过查询用户,然后查看用户的角色信息,再查看用户的授权信息,效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVvDKFtY-1602591363122)(images/1542668969788.png)]

1.2 实现思路分析

我们可以分为3个步骤实现,第1步:查询用户信息,第2步:根据用户的id查询用户的角色信息,但角色信息需要关联用户角色表(sys_user_role),第3步:查询用户菜单信息。实现的SQL语句如下:

--查询用户
select * from sys_user where id=1;

--查询对应角色
select * from sys_user_role sur,sys_role sr where sur.userid=sr.id and id=1;

--查询菜单信息
select * from sys_role_permission srp,sys_permission sp where srp.permissionid=sp.id and srp.roleid=1

1.3 映射关系分析

用户与角色的关系属于多对多关系,角色和权限的关系也属于多对多,我们可以通过这种映射关系来实现数据查找,而多对多在MyBatis注解中可以通过@Result(many=@Many(…))实现。我们可以先加载用户,再通过@Result(many=@Many(…))加载用户的角色信息,还可以通过角色的查询再加载授权信息。

修改用户与角色的关系,在SysUser中添加List roles属性

public class SysUser {
   

    private Long id;
    private String username;    //登录账号
    private String email;
    private String password;    //登录的密码
    private String phoneNum;    //也可以用于登录
    private int status;         //状态,0表示未审核,1.已激活

    //用户和角色之间的关系属于一对多,也属于双向多对多
    private List<SysRole> roles;
    //略....
}
1.4 代码实现
1.4.1 Controller

在SysUserController中添加查询代码

/***
 * 查询用户信息
 * @param id
 * @param model
 * @return
 */
@RequestMapping(value = "/one")
public String findOne(long id,Model model){
   
    //根据ID查询用户信息
    SysUser sysUser = userService.findById(id);

    //将信息存入Model
    model.addAttribute("sysUser",sysUser);
    return "user-show";
}
1.4.2 Service代码
/***
 * 接口
 * 查询用户信息
 * @param id
 * @return
 */
SysUser findById(long id);

/***
 * 查询用户信息-实现类
 * @param id
 * @return
 */
@Override
public SysUser findById(long id) {
   
    return userDao.findById(id);
}
1.4.3 Dao代码
1.4.3.1 UserDao代码
/***
 * 查询用户信息
 * @param id
 * @return
 */
@Select(value = "select * from sys_user where id=#{id}")
@Results(
        //根据用户信息查询角色信息
        @Result(property ="roles",column = "id",
                many = @Many(select = "com.itheima.dao.RoleDao.getByUserId",
                        fetchType = FetchType.LAZY))
)
SysUser findById(long id);
1.4.3.2 RoleDao代码

这里需要根据用户的ID查询用户的角色信息

/***
 * 根据用户ID查询用户角色信息
 * @param id
 * @return
 */
@Select("select * from sys_role sr,sys_user_role sur where sr.id=sur.roleid and sur.userid=#{userId}")
@Results({
   
        @Result(property = "id",column = "id"),
        @Result(property = "permissions",
                column = "id",
                many = @Many(select = "com.itheima.dao.PermissionDao.rolePermissionList"))
})
List<SysRole> userRoleList(Integer id);
1.4.3.3 PermissonDao代码

这里需要根据角色ID查询角色的授权信息

/***
 * 根据角色ID查询权限信息
 * @return
 */
@Select("select * from sys_role_permission srp,sys_permission sp where srp.permissionid=sp.id and srp.roleid=#{id}")
List<SysPermisson> getByRoleId(Long id);
1.4.4 JSP页面

user-show页面代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZKRdlCkd-1602591363125)(D:/html/ssm/4a/images/1542669182450.png)]

上图代码如下:

<tr data-tt-id="0">
	<td colspan="2">${user.username}</td>
</tr>

<tbody>
	<c:forEach items="${user.roles}" var="role" varStatus=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值