标签:config 角色 用户 cti current 后端 导入 自己 als
Authentication 认证
Authorization 授权
principal 首要的,本金,校长
shiro三大对象
Subject 用户
SecurityManager 管理用户
导入依赖
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.7.1</version> </dependency>
创建配置类,创建三个返回shiro主要对象的方法
ShiroFilterFactorBean 3 用途:拦截请求,定义拦截后返回的页面
DefaultWebSecurityManger 2
UserRealm 1
@Configuration
public class ShiroConfig {
//ShiroFilterFactoryBean 3
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//设置安全管理器(根据权限,拦截请求)
bean.setSecurityManager(defaultWebSecurityManager);
//添加shiro内置过滤器
/*过滤的属性
* anon:无需认证就可以访问
* authc:必须认证
* user:必须拥有记住我功能才可以使用。不用
* perms:拥有对某个资源的权限才可以访问
* role:拥有某个角色可以访问
* 下面四行代码完成登陆拦截功能
* */
//拦截
Map<String, String> filterMap=new HashMap<>();
//授权信息配置
filterMap.put("/user/*","perms[user:add]");//表示是一个user请求,有add权限
filterMap.put("/level1/user/*","perms[user:update]");
filterMap.put("/level2/user/*","authc");
bean.setFilterChainDefinitionMap(filterMap);
//设置自定义登陆页面
bean.setLoginUrl("/toLogin");
//设置未授权页面
bean.setUnauthorizedUrl("/unAuth");
return bean;
}
//DefaultWebSecurityManager 2
@Bean(name = "securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//中间商,关联管理UserRealm
securityManager.setRealm(userRealm);
return securityManager;
}
//创建 realm 对象,需要自定义对象 1
@Bean
public UserRealm userRealm(){
return new UserRealm();
}
//整合ShiroDialect:用来整合 shiro thymeleaf
@Bean
public ShiroDialect getShiroDialect(){
return new ShiroDialect();
}
}
创建一个继承AuthorizingRealm的UserRealm类,用途:认证登陆信息。
public class UserRealm extends AuthorizingRealm { //授权与认证 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("执行了=>授权doGetAuthorizationInfo"); return null; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { System.out.println("执行了=>认证doGetAuthorizationInfo"); //认证操作:用户名,密码 String username="root"; String password="123"; UsernamePasswordToken userToken= (UsernamePasswordToken) token; if (!username.equals(userToken.getUsername())){ return null; } //密码认证,shiro自己认证 return new SimpleAuthenticationInfo("",password,""); } }
//授权信息配置 filterMap.put("/user/*","perms[user:add]");//表示一个user用户,有add权限
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { System.out.println("执行了=>认证doGetAuthorizationInfo"); //根据前端获取的用户名,密码,认证登陆 User user = new User("root", "123", "12", "user:add");//模拟从数据库中获取用户信息 String username="root"; String password="123"; //获取前端获取的用户和密码 UsernamePasswordToken userToken= (UsernamePasswordToken) token; if (!username.equals(userToken.getUsername())){ return null; } //登陆成功后,将user保存到session中 Subject currentSubject = SecurityUtils.getSubject(); Session session = currentSubject.getSession(); session.setAttribute("username",user.getName()); //密码认证,shiro自己认证 return new SimpleAuthenticationInfo(user,password,""); }
标签:config 角色 用户 cti current 后端 导入 自己 als
原文地址:https://www.cnblogs.com/youisme/p/14810489.html