Thymeleaf中使用Shiro
2020-03-06 16:13:13来源:博客园 阅读 ()
Thymeleaf中使用Shiro
根据用户权限显示不同页面:
1.thymeleaf扩展shiro
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- shiro与spring整合 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.2</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- thymeleaf整合shiro标签 -->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
2.ShiroConfig和Realm
@Configuration public class ShiroConfig { // 创建ShiroFilterFactoryBean @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){ ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager); // shiro内置过滤器 /** 常用过滤器: * anon:无需认证即可访问 * authc:要授权才可访问 * user:如果使用rememberMe的功能可以直接访问 * perms:该资源必须得到资源授权才可以访问 * roles:该资源必须得到角色授权才可以访问 */ Map<String,String> filterMap=new LinkedHashMap<>(); // filterMap.put("/add","authc"); // filterMap.put("/update","authc"); // 所有路径都被拦截:filterMap.put("/**","authc"); //一些路径不拦截(需要被放过去) filterMap.put("/th","anon"); filterMap.put("/login","anon"); // 授权过滤器 filterMap.put("/add","perms[user:add]"); filterMap.put("/update","perms[user:update]"); // 配置自定义login.html shiroFilterFactoryBean.setLoginUrl("/login"); // 配置未授权页面 shiroFilterFactoryBean.setUnauthorizedUrl("/unAuth"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); return shiroFilterFactoryBean; } // 创建DefaultWebSecurityManager @Bean("securityManager") public DefaultWebSecurityManager getDefaultSecurityManager(@Qualifier("userRealm") UserRealm userRealm){ DefaultWebSecurityManager securityManager=new DefaultWebSecurityManager(); securityManager.setRealm(userRealm); return securityManager; } // 创建realm @Bean(name = "userRealm") public UserRealm getRealm(){ return new UserRealm(); } // 配置ShiroDialect:用于thymeleaf和shiro标签配合使用 @Bean public ShiroDialect getShiroDialect(){ return new ShiroDialect(); } }
public class UserRealm extends AuthorizingRealm { @Autowired private UserService userService; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("授权"); // 给资源进行授权 SimpleAuthorizationInfo info=new SimpleAuthorizationInfo(); // 添加资源的授权字符串 // info.addStringPermission("user:add"); // 获取当前登陆用户 Subject subject = SecurityUtils.getSubject(); User user=(User) subject.getPrincipal(); User user1=userService.findById(user.getId()); // 添加资源的授权字符串 String s= user1.getPerms(); String[] split = s.split(","); for (int i = 0; i <split.length; i++) { info.addStringPermission(split[i]); } return info; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("身份认证"); UsernamePasswordToken token=(UsernamePasswordToken)authenticationToken; User user = userService.findByName(token.getUsername()); if (user==null){ return null; } return new SimpleAuthenticationInfo(user,user.getPassword(),""); } }
3.实体类:
public class User { private Integer id; private String name; private String password; private String perms; 。。。。。
4.数据库:
5.测试:用户1,1有添加和update两个权限,2,2只有一个
<div shiro:hasPermission="user:add"> <a th:href="${add}">添加</a> </div> <div shiro:hasPermission="user:update"> <a th:href="${update}">update</a> </div>
小demo地址:
https://github.com/1017020555/shiro-springboot
原文链接:https://www.cnblogs.com/crazy-lc/p/12427569.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:多线程笔记:同步机制(1)
- 聊聊 OAuth 2.0 的 token expire_in 使用 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- 学习笔记之方法引用 2020-06-06
- idea使用小技巧(一) 2020-06-05
- 用斗地主的实例学会使用java Collections工具类 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash