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');