A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】传智健康项目讲义第八章 九

3.5.5 配置多种校验规则
为了测试方便,首先在项目中创建a.htmlb.htmlc.htmld.html几个页面修改spring-security.xml文件:
[AppleScript] 纯文本查看 复制代码
<!‐‐只要认证通过就可以访问‐‐>
<security:intercept‐url pattern="/index.jsp" access="isAuthenticated()"
/>
<security:intercept‐url pattern="/a.html" access="isAuthenticated()" />
<!‐‐拥有add权限就可以访问b.html页面‐‐>
<security:intercept‐url pattern="/b.html" access="hasAuthority('add')"
/>
<!‐‐拥有ROLE_ADMIN角色就可以访问c.html页面‐‐>
<security:intercept‐url pattern="/c.html" access="hasRole('ROLE_ADMIN')"
/>
<!‐‐拥有ROLE_ADMIN角色就可以访问d.html页面,
注意:此处虽然写的是ADMIN角色,框架会自动加上前缀ROLE_‐‐>
<security:intercept‐url pattern="/d.html" access="hasRole('ADMIN')" /> 

3.5.6 注解方式权限控制
Spring Security除了可以在配置文件中配置权限校验规则,还可以使用注解方式控制类中方法的调用。例如Controller中的某个方法要求必须具有某个权限才可以访问,此时就可以使用Spring Security框架提供的注解方式进行控制。
实现步骤:
第一步:在spring-security.xml文件中配置组件扫描,用于扫描Controller

[AppleScript] 纯文本查看 复制代码
<mvc:annotation‐driven></mvc:annotation‐driven>
<context:component‐scan base‐package="com.itheima.controller">
</context:component‐scan> 

第二步:在spring-security.xml文件中开启权限注解支持

[AppleScript] 纯文本查看 复制代码
<!‐‐开启注解方式权限控制‐‐>
<security:global‐method‐security pre‐post‐annotations="enabled" /> 

第三步:创建Controller类并在Controller的方法上加入注解进行权限控制

[AppleScript] 纯文本查看 复制代码
package com.itheima.controller;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/add")
@PreAuthorize("hasAuthority('add')")//表示用户必须拥有add权限才能调用当
前方法
public String add(){
System.out.println("add...");
return "success";
}
@RequestMapping("/delete")
@PreAuthorize("hasRole('ROLE_ADMIN')")//表示用户必须拥有ROLE_ADMIN角色
才能调用当前方法
public String delete(){
System.out.println("delete...");
return "success";
}
} 

3.5.7 退出登录
用户完成登录后Spring Security框架会记录当前用户认证状态为已认证状态,即表示用户登录成功了。那用户如何退出登录呢?我们可以在spring-security.xml文件中进行如下配置:

[AppleScript] 纯文本查看 复制代码
<!‐‐
logout:退出登录
logout‐url:退出登录操作对应的请求路径
logout‐success‐url:退出登录后的跳转页面
‐‐>
<security:logout logout‐url="/logout.do"
logout‐success‐url="/login.html" invalidate‐
session="true"/>

通过上面的配置可以发现,如果用户要退出登录,只需要请求/logout.do这个URL地址就可以,同时会将当前session失效,最后页面会跳转到login.html页面。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马