Maven的和第一篇,一样直接去复制使用
这篇博客和上一篇没有多大的区别,区别之处就是上一篇没有实现权限认证,将在这一篇中实现,这里我们使用四郎给我们提供的内置类IniRealm,来实现登录,身份和权限验证,值得注意的是,IniRealm这个是引入的配置文件的形式来管理数据库中的数据的
直接上代码吧:
import antlr.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class IniRealmTest {
@Test
public void testAuthenticationTest() {
// 这个是内置的realm类
IniRealm iniRealm = new IniRealm("classpath:user.ini");
// 1.构建SecurityManager环境
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(iniRealm);
// 2.主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject = SecurityUtils.getSubject();
// 这个是需要认证的信息
UsernamePasswordToken token = new UsernamePasswordToken("Mark","123456");
subject.login(token);
System.out.println("isAuthenticated="+subject.isAuthenticated());
//subject.logout();
System.out.println("isAuthenticated="+subject.isAuthenticated());
subject.checkRole("admin");
subject.checkPermissions("user:delete","user:update");
}
}
user.ini的配置文件如下
[users]
Mark=123456,admin
[roles]
admin=user:delete,user:update
其实总体思路上还是:
1.构建安全管理器的环境,然后
2.就类比如一个服务器端,境界为数据库中的用户的信息,把域数据库的用户信息加载到安全管理器环境中去
3.统一把信息部署到主题实现容器或者封装对象的实现类(主题是安全管理器的实现类)中,
4.客户端把要验证的信息在主题容器中进行比对,这时所有的结果都在学科的方法中查看。