首先就是要简历三个表:
users表:至少有id,username,password字段
user_roles表:至少有id,username,role_name字段
roles_permissions表:至少有id,role_name,permission字段
然后就是要导入数据源和mysql依赖
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
接下来就是配置JDBCRealm和使用了
public class JDBCRealmTest {
private JdbcRealm jdbcRealm= new JdbcRealm();
private DruidDataSource druidDataSource = new DruidDataSource();
@Before
public void JDBCRealmSet(){
druidDataSource.setUrl("jdbc:mysql://localhost:3306/test");
druidDataSource.setUsername("root");
druidDataSource.setPassword("root");
druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
jdbcRealm.setDataSource(druidDataSource);
jdbcRealm.setPermissionsLookupEnabled(true);//为了查询权限表,要开启权限查询
}
@Test
public void testAutheticateion(){
//1. 构建SecurityManager环境
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(jdbcRealm); //因为最终式使用Realm来验证,所以要设置Realm
//2. 主体提交认证
SecurityUtils.setSecurityManager(defaultSecurityManager);//先设置认证环境
Subject subject = SecurityUtils.getSubject();
//下来就是登陆了,如果传入的用户名不正确,和Realm中的不匹配,那么久会异常
UsernamePasswordToken token = new UsernamePasswordToken("mark","111");
subject.login(token);
System.out.println("是否登陆成功:"+ subject.isAuthenticated());//true
//查看是否有角色
System.out.println(subject.hasRole("user"));//true
//查看是否有权限
System.out.println(subject.isPermitted("user:select"));//true
subject.checkPermission("user:select");
}