1.引入Shiro的Maven依赖
2、添加securityManager定义
3、添加realm定义
- org.apache.shiro
- shiro-core
- 1.2.1
- org.apache.shiro
- shiro-web
- 1.2.1
- org.apache.shiro
- shiro-ehcache
- 1.2.1
- org.apache.shiro
- shiro-spring
- 1.2.1
- shiroFilter
- org.springframework.web.filter.DelegatingFilterProxy
- shiroFilter
- /*
3. 编写自己的UserRealm类继承自Realm,主要实现认证和授权的管理操作
- package com.jay.demo.shiro;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.Set;
- import org.apache.shiro.authc.AuthenticationException;
- import org.apache.shiro.authc.AuthenticationInfo;
- import org.apache.shiro.authc.AuthenticationToken;
- import org.apache.shiro.authc.LockedAccountException;
- import org.apache.shiro.authc.SimpleAuthenticationInfo;
- import org.apache.shiro.authc.UnknownAccountException;
- import org.apache.shiro.authz.AuthorizationInfo;
- import org.apache.shiro.authz.SimpleAuthorizationInfo;
- import org.apache.shiro.realm.AuthorizingRealm;
- import org.apache.shiro.subject.PrincipalCollection;
- import org.springframework.beans.factory.annotation.Autowired;
- import com.jay.demo.bean.Permission;
- import com.jay.demo.bean.Role;
- import com.jay.demo.bean.User;
- import com.jay.demo.service.UserService;
- public class UserRealm extends AuthorizingRealm{
- @Autowired
- private UserService userService;
- /**
- * 授权操作
- */
- @Override
- protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
- // String username = (String) getAvailablePrincipal(principals);
- String username = (String) principals.getPrimaryPrincipal();
- Set roleSet = userService.findUserByUsername(username).getRoleSet();
- //角色名的集合
- Set roles = new HashSet();
- //权限名的集合
- Set permissions = new HashSet();
- Iterator it = roleSet.iterator();
- while(it.hasNext()){
- roles.add(it.next().getName());
- for(Permission per:it.next().getPermissionSet()){
- permissions.add(per.getName());
- }
- }
- SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
- authorizationInfo.addRoles(roles);
- authorizationInfo.addStringPermissions(permissions);
- return authorizationInfo;
- }
- /**
- * 身份验证操作
- */
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(
- AuthenticationToken token) throws AuthenticationException {
- String username = (String) token.getPrincipal();
- User user = userService.findUserByUsername(username);
- if(user==null){
- //木有找到用户
- throw new UnknownAccountException("没有找到该账号");
- }
- /* if(Boolean.TRUE.equals(user.getLocked())) {
- throw new LockedAccountException(); //帐号锁定
- } */
- /**
- * 交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以在此判断或自定义实现
- */
- SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(),getName());
- return info;
- }
- @Override
- public String getName() {
- return getClass().getName();
- }
- }
4.在Spring的applicationContext.xml中进行Shiro的相关配置
1、添加shiroFilter定义
- /login = anon
- /user/** = authc
- /role/edit/* = perms[role:edit]
- /role/save = perms[role:edit]
- /role/list = perms[role:view]
- /** = authc
-
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?
立即登录/注册


微信扫码登录