1.1、shiro登录,使用shiro提供的JdbcRealm进行数据库验证,用的是阿里的数据库连接池,数据库和JdbcRealm有关 public void simpleConfig(){DefaultSecurityManager securityManager = new DefaultSecurityManager();//设
public void simpleConfig(){
DefaultSecurityManager securityManager =
new DefaultSecurityManager();
//设置alibaba数据库连接池
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/shiro_test");
dataSource.setUsername("root");
dataSource.setPassword("123");
/**
* 设置Realm(就是我们获取用户/权限的类,可能存在数据库中,
* 可能存在LDAP中,可能存在redis中),一般Realm是我们自己实现的
* 继承AuthorizingRealm即可实现重写Realm实现类
* 我们这里使用shiro提供的处理数据库的Realm:JdbcRealm
*/
JdbcRealm realm = new JdbcRealm();
realm.setDataSource(dataSource);
realm.setPermissionsLookupEnabled(true);
securityManager.setRealm(realm);
SecurityUtils.setSecurityManager(securityManager);
//开始登陆认证
Subject subject = SecurityUtils.getSubject();
//当前登录用户“zhang”,密码“123”
UsernamePasswordToken token = new UsernamePasswordToken("zhang","123");
subject.login(token);
Assert.assertTrue(subject.isAuthenticated());
}
1.2、JdbcRealm源码中的SQL语句与数据库表
JdbcRealm中默认的sql语句: String DEFAULT_AUTHENTICATION_QUERY = "select password from users where username = ?"; String DEFAULT_SALTED_AUTHENTICATION_QUERY = "select password, password_salt from users where username = ?"; String DEFAULT_USER_ROLES_QUERY = "select role_name from user_roles where username = ?"; String DEFAULT_PERMISSIONS_QUERY = "select permission from roles_permissions where role_name = ?"; 我们可以修改默认的sql来匹配我们自己建的数据库,以下是JdbcRealm的几个方法: public void setAuthenticationQuery(String authenticationQuery); 对应:DEFAULT_AUTHENTICATION_QUERY,DEFAULT_SALTED_AUTHENTICATION_QUERY public void setUserRolesQuery(String userRolesQuery); 对应:DEFAULT_USER_ROLES_QUERY public void setPermissionsQuery(String permissionsQuery); 对应:DEFAULT_PERMISSIONS_QUERY 我们一般自己编写Realm,不使用JdbcRealm,JdbcRealm毕竟比较建议;如果仅作为测试用, 就只想使用JdbcRealm,我们下面提供了与JdbcRealm相匹配的建表语句; !需要注意的是本例的数据库名为 “shiro_test” !1.3、与JdbcRealm相匹配的数据库建表语句
create table users (
id bigint auto_increment,
username varchar(100),
password varchar(100),
password_salt varchar(100),
constraint pk_users primary key(id)
) charset=utf8 ENGINE=InnoDB;
create unique index idx_users_username on users(username);
create table user_roles(
id bigint auto_increment,
username varchar(100),
role_name varchar(100),
constraint pk_user_roles primary key(id)
) charset=utf8 ENGINE=InnoDB;
create unique index idx_user_roles on user_roles(username, role_name);
create table roles_permissions(
id bigint auto_increment,
role_name varchar(100),
permission varchar(100),
constraint pk_roles_permissions primary key(id)
) charset=utf8 ENGINE=InnoDB;
create unique index idx_roles_permissions on roles_permissions(role_name, permission);
insert into users(username,password)values('zhang','123');
