本次内容如下:
- 自定义数据库实现用户权限管理
- 用户信息加密(md5,盐值加密)
- 从页面怎么取到登录用户名
- action中怎么取到用户信息
一:自定义数据库实现用户权限管理
在安全管理一中我们采用的是spring security默认的数据库表结构实现的权限管理,在真实环境中,默认的表结构不能满足我们的需求,我们需要自定义表结构来实现用户权限管理,而本节就讲解怎么自定义数据库实现用户权限管理。
首先我们建立数据表结构:
--用户表
create table TEST_USER
(
ID VARCHAR2(100) not null,
USERNAME VARCHAR2(200),
PASSWORD VARCHAR2(200),
ENABLED CHAR(1)
)
--角色表
create table TEST_ROLE
(
ID VARCHAR2(100) not null,
ROLE_NAME VARCHAR2(200)
)
--用户与角色关系表
create table TEST_USER_ROLE
(
USER_ID VARCHAR2(100),
ROLE_ID VARCHAR2(100)
)
第二步到applicationContext-security.xml中修改配置,我在这里就不把所有配置重新列出来,就在安全管理一配置的基础上修改
<ss:authentication-provider>
<ss:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select username,password,enabled from test_user where username=?"//用户认证
authorities-by-username-query="select u.username,r.role_name authority from test_user u
join test_user_role ur on u.id = ur.user_id
join test_role r on r.id = ur.role_id
where u.username =?"/>//授权
</ss:authentication-provider>
二:用户信息加密
主要讲md5加密与盐值加密,盐值加密就是采用密码加上一个字段(一般采用用户名)进行加密的方式
<ss:authentication-provider>
<ss:password-encoder hash="md5">
<ss:salt-source user-property="username"/> 盐值 密码+用户名=密码
</ss:password-encoder>
<ss:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select username,password,enabled from test_user where username=?"
authorities-by-username-query="select u.username,r.role_name authority from test_user u
join test_user_role ur on u.id = ur.user_id
join test_role r on r.id = ur.role_id
where u.username =?"/>
</ss:authentication-provider>
md5
admin = 21232f297a57a5a743894a0e4a801fc3
user = ee11cbb19052e40b07aac0ca060c23ee
盐值
admin = ceb4f32325eda6142bd65215f4c0f371
user = 47a733d60998c719cf3526ae7d106d13
三:jsp页面获取用户名
第一步配置spring security标签
<%@taglib prefix="ss" uri="http://www.springframework.org/security/tags" %>
第二步:
欢迎您 !<ss:authentication property="name"></ss:authentication>
四:action中获取用户信息
UserDetails user = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
system.out.println(user.getUsername());