:spring
package com.shi.authentication; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.util.Factory; import org.junit.Test; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; /** * 认证测试 * @author SHF * */ public class AuthenticationTest { //用户登陆和退出 @Test public void testLoginAndLogout(){ //1 建立securityManager工厂,经过ini配置文件建立securityManage工厂 Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro-first.ini"); //2 建立SecurityManager SecurityManager securityManager=factory.getInstance(); //3 将SecurityManager设置当前的运行环境中 SecurityUtils.setSecurityManager(securityManager); //4 从SecurityUtils里边建立一个subject Subject subject=SecurityUtils.getSubject(); //5 在认证提交前准备token(令牌) UsernamePasswordToken token =new UsernamePasswordToken("zhangsan", "111111"); try { //6 执行认证提交 subject.login(token); } catch (Exception e) { e.printStackTrace(); } //是否定证经过 boolean isAuthenticated=subject.isAuthenticated(); System.out.println("是否定证经过:"+isAuthenticated); subject.logout(); //是否定证经过 boolean isAuthenticated2=subject.isAuthenticated(); System.out.println("是否定证经过:"+isAuthenticated2); } }
shiro-first.ini数据库
#对用户信息进行设置 [users] #设置用户名和密码 zhangsan=111111 lisi=222222
jar包:apache
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shi.shiro</groupId> <artifactId>Shiro-First</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.3</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies> </project>
package com.shi.realm; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; public class CustomRealm extends AuthorizingRealm{ //设置realm的名字 @Override public void setName(String name) { super.setName("customRealm"); } /** * 用于认证 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { //1 从token中取出身份信息(token是用户输入的) String userCode=(String) token.getPrincipal(); //2 根据用户输入的userCode从数据库查询 //... 模拟数据库中取出的密码是"111111" String password="111111"; //3 若是 查询不到返回null if(!"zhangsan".equals(userCode)){ return null; } //若是查询到 返回认证信息AuthenticationInfo SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo(userCode, password, this.getName()); return simpleAuthenticationInfo; } /** * 用于受权 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // TODO Auto-generated method stub return null; } }
shiro-realm.ini文件 的配置maven
[main] #自定义realm customRealm=com.shi.realm.CustomRealm #讲realm设置到securityManager中,至关于spring中的注入 securityManager.realm=$customRealm
测试代码:ide
// 2 自定义CustomRealm测试 @Test public void testCustomRealm(){ //1 建立securityManager工厂,经过ini配置文件建立securityManage工厂 Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro-realm.ini"); //2 建立SecurityManager SecurityManager securityManager=factory.getInstance(); //3 将SecurityManager设置当前的运行环境中 SecurityUtils.setSecurityManager(securityManager); //4 从SecurityUtils里边建立一个subject Subject subject=SecurityUtils.getSubject(); //5 在认证提交前准备token(令牌) UsernamePasswordToken token =new UsernamePasswordToken("zhangsan", "111111"); try { //6 执行认证提交 subject.login(token); } catch (Exception e) { e.printStackTrace(); } //是否定证经过 boolean isAuthenticated=subject.isAuthenticated(); System.out.println("是否定证经过:"+isAuthenticated); subject.logout(); //是否定证经过 boolean isAuthenticated2=subject.isAuthenticated(); System.out.println("是否定证经过:"+isAuthenticated2); }