本文将介绍shiro依赖Realm完成角色和权限控制的过程。
spring4.2.4
完成shiro读取ini文件 https://www.jianshu.com/p/3c31a55b0f63
myRealm=net.wanho.security.MyRealm
package net.wanho.security;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class MyRealm extends AuthorizingRealm {
//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
//认证
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
String pwd = new String ((char[])token.getCredentials());
String username = (String)token.getPrincipal();
if(pwd.equals("123456"))
{
return new SimpleAuthenticationInfo(username,pwd,getName());
}
else {
throw new IncorrectCredentialsException();
}
}
}
@Test
public void test1() {
SecurityManager securityManager =
new IniSecurityManagerFactory("classpath:shiro-realm.ini").getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhangli", "123456");
try {
subject.login(token);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("123");
}
allSuccessfulStrategy=org.apache.shiro.authc.pam.AllSuccessfulStrategy
securityManager.authenticator.authenticationStrategy=$allSuccessfulStrategy
myRealm=net.wanho.security.MyRealm
yourRealm=net.wanho.security.YourRealm
securityManager.realms=$myRealm,$yourRealm
package net.wanho.security;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
public class YourRealm extends AuthorizingRealm {
//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
//认证
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
String pwd = new String ((char[])token.getCredentials());
String username = (String)token.getPrincipal();
if(username.equals("zhangli"))
{
return new SimpleAuthenticationInfo(username,pwd,getName());
}
else {
throw new UnknownAccountException();
}
}
}
@Test
public void test2() {
SecurityManager securityManager =
new IniSecurityManagerFactory("classpath:shiro-realms.ini").getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhangli", "12345");
subject.login(token);
System.out.println("123");
}
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
dataSource=com.alibaba.druid.pool.DruidDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/shiro
dataSource.username=root
dataSource.password=zhangli
jdbcRealm.dataSource=$dataSource
securityManager.realms=$jdbcRealm
create database shiro;
use shiro;
create table users(username varchar(20),password varchar(20));
insert into users values('ali','123456');
insert into users values('zhangli','123456');
create table user_roles(role_name varchar(20),username varchar(20));
insert into user_roles(role_name,username) values('admin','ali');
insert into user_roles(role_name,username) values('user','zhangli');
create table roles_permissions(permission varchar(20),role_name varchar(20));
insert into roles_permissions values('update','admin');
insert into roles_permissions values('insert','admin');
insert into roles_permissions values('delete','admin');
insert into roles_permissions values('select','admin');
insert into roles_permissions values('select','user');
@Test
public void test3() {
SecurityManager securityManager =
new IniSecurityManagerFactory("classpath:shiro-jdbc-realm.ini").getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("ali", "123456");
subject.login(token);
boolean ret = subject.hasRole("admin");
boolean isOk = subject.isPermitted("insert");
System.out.println("123");
}
以上就是通过ini获取Realm逻辑完成权限和角色校验的过程。
原文:https://www.cnblogs.com/alichengxuyuan/p/12519985.html