Spring Security还是很强大的,即支持粗粒度的访问控制,还能支持精确到web元素的的控制。
首先,spring配置中添加对security的支持:
其中定义了角色ROLE_ADMIN和ROLE_USER都能访问所有资源,但是只有ROLE_ADMIN能访问基于url为/jsp/admin/* 的资源。
如果form-login不做配置,则如果访问被拒绝的时候,会跳转到spring提供的一个login form。
form-login中 login-processing-url 配置的路径必须和web form中提交的url一致。
其中user-service配置了两种:
1.被注释掉的是基于jdbc的,这需要在数据库中创建几张表:
mysql> desc user_t;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id_f | int(11) | NO | PRI | NULL | auto_increment |
| name_f | varchar(100) | YES | | NULL | |
| password_f | varchar(32) | YES | | NULL | |
| status_f | int(11) | YES | | 1 | |
+------------+--------------+------+-----+---------+----------------+
mysql> desc role_t;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id_f | int(11) | NO | PRI | NULL | auto_increment |
| name_f | varchar(100) | YES | | NULL | |
| status_f | int(11) | YES | | 1 | |
+----------+--------------+------+-----+---------+----------------+
mysql> desc user_role_t;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id_f | int(11) | NO | PRI | NULL | auto_increment |
| user_f | varchar(100) | NO | | | |
| role_f | varchar(100) | NO | | | |
+--------+--------------+------+-----+---------+----------------+
2.第二种基于配置文件的用户名密码管理,密码是md5加密的
下面是login form:
如果直接访问某个未授权的资源,会弹回这个登录页面,密码验证成功之后,跳转到之前访问的资源页面。
如果想指定web中某个按钮或者链接只在登录者具有admin权限的时候显示,可以这样:
下面是使用到的标签申明:
如果想使用https协议访问admin相关资源,可以这样:
首先,在修改security配置:
然后,修改tomcat配置文件server.xml