SpringSecurity的主要功能是认证和授权,前面我们分别讲了基于httpBasic和formLogin的登录认证。本节开始,我们讲解SpringSecurity的授权。
授权:授予用户一定的权限。
基于前面章节的代码,我们假设有这样一个需求:现在有两个用户,xhc1和xhc2,xhc1持有商品显示和添加的权限,xhc2持有商品修改和删除的权限。那我们来实现吧。
1: 修改spring-security.xml文件,添加用户信息
security:authentication-provider
<security:user name="xhc1" password="123456" authorities="ROLE_USER"/>
<security:user name="xhc2" password="123456" authorities="ROLE_ADMIN"/>
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
2: 在intercept-url pattern="/userLogin"后面新增拦截的地址
<security:intercept-url pattern="/userLogin" access="permitAll()"/>
<security:intercept-url pattern="/goods/add" access="hasRole('ROLE_USER')"/>
<security:intercept-url pattern="/goods/list" access="hasRole('ROLE_USER')"/>
<security:intercept-url pattern="/goods/delete" access="hasRole('ROLE_ADMIN')"/>
<security:intercept-url pattern="/goods/update" access="hasRole('ROLE_ADMIN')"/>
access中的hasRole方法就是判断是否匹配参数中的的角色。注意:角色一定是以ROLE_开头,这是springSecurity要求的。
3: 自定义权限不足的页面。由于权限不足会报出403,所以需要自定义权限不足的页面。
在jsp目录下新增一个error.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>错误页面</title>
</head>
<body>您没有权限访问
</body>
</html>
在MainController中添加
@RequestMapping("/error")
public String error() {
return "error";
}
配置文件中新增access-denied-handler
<security:csrf disabled="true"/>
<!– 权限不足 –>
<security:access-denied-handler error-page="/error"/>
启动项目,分别使用xhc1和xhc2进行登录,如果权限不足,会跳转到error.jsp页面进行展示。