Shiro學習

Authenticator : 認證器,管理登入、登出mysql

Authorizer : 受權器,管理主體有哪些權限sql

Session Manager : session管理器數據庫

Session DAO : session的增刪改查緩存

Cache Manager : 緩存管理器session

Realms : shiro與數據源之間的橋樑,獲取認證信息、權限數據、角色數據都是經過realms獲取的ui

 

一、Shiro認證spa

建立SecurityManager->主體提交認證請求->SecurityManager認證->Authenticator認證->Realms驗證blog

SimpleAccountRealm繼承

DefaultSecurityManagertoken

SecurityUtils

UsernamePasswordToken

用戶名不正確:找不到用戶名異常

密碼不正確:不正確的憑證異常

subject.login(token);

subject.isAuthenticated();

二、Shiro受權

建立SecurityManager->主題受權->SecurityManager受權->Authorizer受權->Realm獲取角色權限數據

subject.checkRoles("admin","user1");

三、Realm

內置Realm:IniRealm JdbcRealm

IniRealm iniRealm = new IniRealm("classpath:user.ini");

subject.checkPermission("user:delete");

user.ini文件內容以下:

[Users]

Mark=123456,admin

[roles]

admin=user:delete,user:update

 

DruidDataSource druidDataSource = new DruidDataSource();

druidDataSource.setUrl("jdbc:mysql://localhost:3306/test");

druidDataSource.setUsername("root");

druidDataSource.setPassword("root");

JdbcRealm jdbcRealm = new JdbcRealm();

jdbcRealm.setDataSource(dataSource);

jdbcRealm.setPermissionsLookupEnabled(true);

select password from users where username = ?

select passwork,password_salt from users where username = ?

select role_name from user_roles where username = ?

select permission from roles_permissions where role_name = ?

users表:id,username,password

user_roes表:id,Mark,admin

roles_permissions表:id,role_name,permission

 

JdbcRealm

String sql = "select password from test_user where user_name = ?";

jdbcRealm.setAuthenticationQuery(sql);

String roleSql = "select role_name from test_user_role where user_name = ?";

jdbcRealm.setUserRolesQuery(roleSql);

 

自定義受權,新增CustomRealm類,須要繼承AuthorizingRealm抽象類,實現它的抽象方法(這裏用集合模擬從數據庫/緩存中獲取數據)

SimpleAuthorizationInfo:受權信息

SimpleAuthenticationInfo:認證信息

相關文章
相關標籤/搜索