您的位置:首页 > 数据库 > MySQL

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

2011-09-23 15:49 441 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: