在WEB应用中使用mysql部署shiro安全框架【转】

shiro框架提供了验证、授权、加密、会话管理等常用的安全功能,而且使用POJO式的API使得该框架能部署在大多数的环境中,此外还针对不同的情形提供了各种API实现,在数据存储上,其开放式的API使得我们在不同数据环境中进行方便自如的切换,shiro同样支持MYSQL方式,下面是使用MYSQL数据库的SHIRO配置:

[main]
ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
ds.serverName = 10.0.31.77
ds.user = root
ds.password =zavens
ds.databaseName = users
ds.url = jdbc:mysql://10.0.31.77:3306/zavens
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.authenticationQuery = SELECT password FROM users WHERE username = ?
jdbcRealm.userRolesQuery = SELECT rolename FROM user_roles WHERE username = ?
jdbcRealm.permissionsQuery = SELECT permission FROM role_permissions WHERE rolename = ?
jdbcRealm.dataSource = $ds

authc.loginUrl = /login.xhtml
perms.unauthorizedUrl = /login.xhtml
roles.unauthorizedUrl = /login.xhtml
[urls]
/admin/**=authc,perms[jimi] 
/system/**=authc,perms[juemi]

 这里需要说明的是,jdbcRealm.authenticationQuery,jdbcRealm.userRolesQuery,jdbcRealm.permissionsQuery配置行,相对应的时三个表users,user_roles,role_permissions,这三行是告诉SHIRO从何处获取授权的配置,他们是jdbc的预查询语句。authenticationQuery用于从users中查找密码来进行验证,查询后取得第一条记录的第一个字段进行验证。userRolesQuery用于从user_roles查找所属的角色,它可以是多行,但是要保证查询后的角色是第一个字段。permissionsQuery用于从role_permissions中查找权限字符串,同样要求是第一个字段,可以是多条记录。

当告诉SHIRO从哪里获取授权后,还得告诉SHIRO对谁进行授权。[urls]部分就是起这个作用。/admin/**=authc,perms[jimi] 这句,/admin/**是指针对admin目录配置权限,authc,是系统内置的过滤器,告诉shiro,进入此目录,必须是已验证的登录用户。perms[jimi] 是权限限定符,perms同样是内置的过滤器,指org.apache.shiro.web.filter. authz.PermissionsAuthorizationFilter,jimi是通过jdbcRealm.permissionsQuery查询出来的权限字符串,只有用户获得的角色含有该字符串,才能获得访问授权。如果针对角色授权,可以是/admin/**=authc,roles[admin] .

SHIRO内置了很多过滤器,如下:

anon  org.apache.shiro.web.filter.authc.AnonymousFilter  
authc  org.apache.shiro.web.filter.authc.FormAuthenticationFilter  
authcBasic  org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter  
logout  org.apache.shiro.web.filter.authc.LogoutFilter  
noSessionCreation  org.apache.shiro.web.filter.session.NoSessionCreationFilter  
perms  org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter  
port  org.apache.shiro.web.filter.authz.PortFilter  
rest  org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter  
roles  org.apache.shiro.web.filter.authz.RolesAuthorizationFilter  
ssl  org.apache.shiro.web.filter.authz.SslFilter  
user  org.apache.shiro.web.filter.authc.UserFilter

 引自:http://blog.csdn.net/zavens/article/details/6804075

相关推荐