今天我想给我的方法调用加上权限管理,比如说index.jsp上有三个链接
<p><a href="users/add.do">add</a></p>
<p><a href="users/dell.do">dell</a></p>
<p><a href="users/list.do">list</a></p>
具有ROLE_USER的用户只能访问第一个链接,具有ROLE_ADMIN的用户可以访问所有链接,如果想通过路径来进行权限控制,则必须将所有请求地址全部罗列出来,那个工作量就大了。
进入正题,先写一个控制器,我的程序是基于Spring MVC的,所以就写一个POJO类,奖赏Controller注解完成。
@Controller
@RequestMapping("/users")
public class UserController
{
@Autowired
protected UserService userService;
@RequestMapping("/add")
public ModelAndView add()
{
ModelAndView modelAndView=new ModelAndView("result");
userService.addUser();
modelAndView.addObject("message","add成功");
return modelAndView;
}
@RequestMapping("/dell")
public ModelAndView del()
{
ModelAndView modelAndView=new ModelAndView("result");
userService.delUser();
modelAndView.addObject("message","del成功");
return modelAndView;
}
@RequestMapping("/list")
public ModelAndView list()
{
ModelAndView modelAndView=new ModelAndView("result");
List<String> users=userService.listUser();
System.out.println("size="+users.size());
modelAndView.addObject("users",users);
return modelAndView;
}
}
UserService接口定义如下:
public interface UserService
{
@PreAuthorize("hasRole('ROLE_USER')")
public void addUser();
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void delUser();
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PostFilter("filterObject.length()<5")
public List<String> listUser();
}
UserService接口的实现类:
@Component("userService")
public class UserServiceImpl implements UserService
{
@Override
public void addUser()
{
System.out.println("add user...");
}
@Override
public void delUser()
{
System.out.println("del user...");
}
@Override
public List<String> listUser()
{
System.out.println("list user");
List<String> list=new LinkedList<String>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
return list;
}
}
编写一个结果返回页面result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title></title>
</head>
<body>
<h2>${message}</h2>
<hr>
<c:forEach var="name" items="${users}">${name}<br></c:forEach>
</body>
</html>
测试程序发现不管具有ROLE_USER的用户也可以访问del和list方法,真实百思不得其解,没办法只有查看Spring Security自带的示例程序,费了很大劲才在网上搜索到contact的源代码,发现service层Spring没有使用注解,而是在配置文件中配置bean元素,于是把@Component去掉,添加一个bean
<bean id="userService" class="com.leman.service.UserServiceImpl"/>
试了一下,发现权限控制起作用了,这是怎么回事呢,我也没有弄明白,期待高手解答。
分享到:
相关推荐
### Spring Security 3.0.1 中文自学教程知识点概览 #### 一、Spring Security 简介 ##### 1.1 Spring Security 是什么? Spring Security 是一款强大的、高度可定制的身份验证与授权框架。它能够帮助开发者保护...
Spring Security是一套广泛使用的安全框架,由Spring社区提供支持,主要用于在Spring应用中提供安全控制功能。其主要职责是提供认证(登录验证)和授权(访问控制)。Spring Security提供了一整套完整的、灵活的安全...
3. **注解实例**:通过实例,你可以学习如何使用这些注解来简化代码,比如使用`@RequestMapping`处理不同的URL请求,`@Autowired`自动装配bean,以及`@Service`和`@Component`在组件扫描中的作用。 4. **Spring与...
这份PDF教程简洁明了,内容精炼,非常适合初次接触Spring的开发者进行自学。 Spring是Java企业级应用开发中的一个关键框架,它提供了丰富的功能,包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-...
1. **IoC(控制反转)**:IoC容器负责管理对象的生命周期,通过XML配置或注解方式定义对象及其依赖关系,从而实现对象的自动装配。 2. **AOP(面向切面编程)**:AOP允许开发者定义“切面”,这些切面可以在运行时被...
《JavaWeb整合开发完全自学手册》介绍如何整合Struts+Hibernate+Spring+Eclipse进行J2EE开发,所有实例都基于MyEclipseIDE开发,引领读者快速进入基于JavaWeb的J2EE应用领域。《JavaWeb整合开发完全自学手册》主要...
- Spring与其他流行框架(如Struts、Hibernate等)的对比分析。 2. **Spring核心容器深入解析**: - BeanFactory与ApplicationContext的实现机制。 - Bean的生命周期管理,包括初始化、销毁等过程。 - 自定义...
springcloud生产者与消费者项目实战案例 Spring Cloud 中断路器 Circuit Breaker的应用 配置 Spring Cloud Config Server Spring Cloud Config使用Oracle数据库作为后端配置存储 Spring Cloud Config + Spring Cloud...
- ORM集成:探讨Spring与Hibernate、MyBatis等ORM框架的整合,实现数据持久化。 5. **第五章:Spring MVC** - MVC架构:理解Model-View-Controller模式,以及Spring MVC如何实现这一模式。 - Controller处理请求...
5. **Spring与数据库交互**:Spring支持多种数据访问技术,包括JDBC、Hibernate、MyBatis等。它提供了一种声明式事务管理,使得事务处理更加简单。此外,Spring Data项目则进一步简化了数据访问层的编写,如JPA和...
6. **Spring Security**:对于涉及到安全性的话题,源代码可能包含Spring Security的配置和认证授权示例。 通过深入研究这些源代码,开发者可以更好地理解Spring框架的工作原理,提升自己的技能,并且能够应用到...
自学Spring所产生的代码,包含IOC、AOP的入门以及进阶,Spring与数据库(MySQL)的交互。(该资源不仅包含我写的代码,一切Spring、aspect、jdbc等所需jar包都俱全,项目导入就能跑起来)
指南中涵盖了诸多与Spring框架相关的主题,并为考生准备了大量资源供学习参考,旨在帮助考生全面而深入地掌握Spring技术。 首先,文档强调了在Spring Professional认证考试准备过程中,阅读提供的材料是最佳的学习...
【Spring MVC 自学教程】 Spring MVC 是一个基于 Model-View-Controller(MVC)设计模式的轻量级 Web 开发框架。它使开发者能够轻松地将业务逻辑、数据处理和用户界面分离,从而提高代码的可维护性和复用性。 **...
博客项目自学教程主要涵盖了SpringBoot、Thymeleaf、PageHelper和SpringSecurity四个核心技术和框架。下面将分别详细解释这些技术及其在项目中的应用。 **SpringBoot** SpringBoot是由Pivotal团队提供的全新框架,...
总的来说,"Spring学习之路"资料包将带你走过Spring框架的基本知识,从Spring的核心原理到实战Spring MVC项目,是一条完整的自学路径。希望你在学习过程中不断积累,提升自己的Java Web开发能力。
在项目中,你可以看到如何定义Bean,以及如何通过@Autowired注解实现自动装配。 2. **面向切面编程(Aspect-Oriented Programming,AOP)**:Spring对AOP的支持使得我们能够将关注点分离,比如日志记录、事务管理等...
Spring的诞生是为了应对早期J2EE开发中的一些问题,这些问题主要源于对J2EE平台服务的过度依赖和滥用,导致了复杂度增加和开发效率降低。 Spring作为一个轻量级框架,它提倡依赖注入(Dependency Injection,DI)和...
本自学文档主要介绍了Spring MVC的基本概念和核心组件,适合初学者掌握其基本工作原理。 1. DispatcherServlet(前端控制器) DispatcherServlet是Spring MVC的入口点,它充当着整个框架的前端控制器角色。在web....
在这个“最小依赖jar不集成spring”的自学练习版本中,我们将专注于Mybatis的核心功能,不涉及与Spring框架的整合。 首先,让我们了解Mybatis的基本构成: 1. **Mybatis核心Jar**:这个版本包含Mybatis框架的核心...