springboot-shiro:整合thymeleaf

承接:springboot-shiro:请求授权

1 引入thymeleaf-shiro整合依赖

pom.xml

<!--thymeleaf-shiro整合包-->
<dependency>
    <groupId>com.github.theborakompanioni</groupId>
    <artifactId>thymeleaf-extras-shiro</artifactId>
    <version>2.1.0</version>
</dependency>

2 配置一个shiro的Dialect,在ShiroConfig中增加一个Bean

src/main/java/com/lv/config/ShiroConfig.java

//整合ShiroDialect:用来整合shiro thymeleaf
@Bean
public ShiroDialect getShiroDialect(){
    return new ShiroDialect();
}

3 修改首页

增加了三部分:

  • 在头文件中加入了shiro的约束
  • 添加了登录的链接,和通过 th:if 实现该链接是否显示的判断.
  • 添加了通过 shiro:hasPermission 对add和update链接显示与否的判断

src/main/resources/templates/index.html

<!DOCTYPE html>
<html lang="en" xmlns:shiro="http://www.thymeleaf.org/thymeleaf-extras-shiro">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<p th:text="${msg}"></p>
<!--从session中判断值-->
<div th:if="${session.loginUser == null}">
    <a th:href="@{/toLogin}">登录</a>
</div>
<hr>
<div shiro:hasPermission="user:add">
    <a th:href="@{/user/add}">add</a>
</div>
<div shiro:hasPermission="user:update">
    <a th:href="@{/user/update}">update</a>
</div>
</body>
</html>

4 在UserRealm 添加存入用户信息的代码

在用户认证成功后,将用户信息放入session中

src/main/java/com/lv/config/UserRealm.java

//认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    System.out.println("执行了=>认证doGetAuthorizationInfo");
    UsernamePasswordToken userToken = (UsernamePasswordToken) token;
    //连接真实的数据库
    User user = userService.queryUserByName(userToken.getUsername());
    if (user == null){ //没有这个人
        return null; //UnknownAccountException
    }
    //用户登录成功将用户信息存入session
    Subject currentSubject = SecurityUtils.getSubject();
    Session session = currentSubject.getSession();
    session.setAttribute("loginUser",user);

    //密码认证,交给shiro做(可以加密: MD5,MD5盐值加密)
    return new SimpleAuthenticationInfo(user,user.getPwd(),"");
}

5 启动项目测试

访问首页,未登录状态下,显示了登录按钮,点击登录

跳转到了登陆页面,登录admin1用户

登录成功后,登录按钮消失,并且只显示add按钮,admin1用户只有访问add权限

再登录admin2用户,只显示了update按钮,admin2用户只有访问update权限

说明权限控制成功实现,thymeleaf语法生效了,shiro整合thymeleaf完成

posted @ 2022-03-09 12:45  从0开始丿  阅读(106)  评论(0编辑  收藏  举报