最新更新:2020年9月22日08:14:22
<!--整合Thymeleaf-->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
package com.zibo.config;
import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.LinkedHashMap;
@Configuration
public class ShiroConfig {
//1、创建Realm对象,需要自定义
@Bean
public AccountRealm accountRealm(){
return new AccountRealm();
}
//2、DefaultWebSecurityManager
@Bean(name = "securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("accountRealm")AccountRealm accountRealm){
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
//关联accountRealm
manager.setRealm(accountRealm);
return manager;
}
//3、ShiroFilterFactoryBean
@Bean(name = "shiroFilterFactoryBean")
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager")DefaultWebSecurityManager manager){
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//设置安全管理器
bean.setSecurityManager(manager);
//添加shiro内置过滤器
/*
* anon:无需认证就可以访问;
* authc:必须认证了才能访问;
* user:必须拥有记住我功能才能访问(一般不用);
* perms:拥有对某个资源的权限才能访问;
* role:拥有某个角色权限才能访问;
*/
LinkedHashMap<String, String> filterMap = new LinkedHashMap<>();
//★★★授权:只有account:add权限的账户才能访问
//注意:注意这是一个有序map,需要卸载拦截前面,否则不生效!!!
filterMap.put("/account/add","perms[account:add]");
//拦截:设置认证了才能访问
filterMap.put("/account/*","authc");
bean.setFilterChainDefinitionMap(filterMap);
//设置登录页面
bean.setLoginUrl("/toLogin");
//设置未授权页面
bean.setUnauthorizedUrl("/noauth");
return bean;
}
//shiro整合thymeleaf
@Bean
public ShiroDialect getShiroDialect(){
return new ShiroDialect();
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>首页</h1>
<p th:text="${msg}"></p>
<div shiro:hasPermission="account:add">
<a th:href="@{/account/add}">add</a>
</div>
<a th:href="@{/account/update}">update</a>
<a th:href="@{/logout}">注销</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>首页</h1>
<p th:text="${msg}"></p>
<!-- 判断当前用户是否已经认证,未认证就可以看到标签中的内容 -->
<shiro:notAuthenticated>
登录成功则隐藏
</shiro:notAuthenticated>
<br/>
<!-- 判断当前用户是否已经认证,已认证就可以看到标签中的内容 -->
<shiro:authenticated>
登录成功则显示
</shiro:authenticated>
<br/>
<!-- 判断当前用户是否拥有指定的权限 -->
<shiro:hasPermission name="account:add">
当前用户有account:add权限则显示
</shiro:hasPermission>
<br>
<div shiro:hasPermission="account:add">
<a th:href="@{/account/add}">add</a>
</div>
<a th:href="@{/account/update}">update</a>
<a th:href="@{/logout}">注销</a>
</body>
</html>
链接:https://pan.baidu.com/s/1UcX7tWIBZxJtt4ViGYC2mg 提取码:zibo 复制这段内容后打开百度网盘手机App,操作更方便哦