采用annotation对spring-mvc进行登录权限控制

本文介绍了一种使用注解和拦截器在Spring MVC中实现用户登录验证的方法。通过自定义注解和全局拦截器,可以在需要登录检查的方法上进行标记,从而简化登录验证逻辑。

在web系统中,判断用户是否登录是一个常用功能. 本文提出一种采用annotation对spring-mvc进行用户登录判断的方法.
程序源代码

方法简介

建立一个annotation, 在需要登录判断的spring-mvc方法上进行标注. 再建立一个全局的spring-mvc的interceptor对spring-mvc方法进行过滤, 如果发现有annotation标注的, 就进行登录判断,对没有登录的用户做对应的处理.

优点

采用一个过滤器, 在需要控制的方法上进行标注, 实现和编码都比较简单. 大道至简:)

###具体的实现案例
1.建立登录判断后返回给浏览器的结果类型, (这里有两种: 传统登录页面或者ajax结果).

<!-- lang: java -->
public enum ResultTypeEnum {
//整页刷新
page, 
//json数据
json
}

2.建立annotation, 用于标注需要登录检查的spring-mvc方法

<!-- lang: java -->
public @interface Login {
ResultTypeEnum value() default ResultTypeEnum.page;
}

3.建立用于过滤spring-mvc的interceptor类

<!-- lang: java-->
public class LoginAnnotationInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

	HandlerMethod handler2 = (HandlerMethod) handler;
	Login login = handler2.getMethodAnnotation(Login.class);

	if (null == login) {
		// 没有声明权限,放行
		return true;
	}

	HttpSession session = request.getSession();
            //取得session中的用户信息, 以便判断是否登录了系统
	Worker worker = (Worker) session.getAttribute(SessionHelper.WorkerHandler);

	if (null == worker) {
		// 需要登录
		if (login.value() == ResultTypeEnum.page) {
			//传统页面的登录
			request.getRequestDispatcher("/login.jsp?oprst=false&opmsg=请登录!").forward(request, response);
		} else if (login.value() == ResultTypeEnum.json) {
			//ajax页面的登录
			response.setCharacterEncoding("utf-8");
			response.setContentType("text/html;charset=UTF-8");
			OutputStream out = response.getOutputStream();
			PrintWriter pw = new PrintWriter(new OutputStreamWriter(out,"utf-8"));
			//返回json格式的提示
			pw.println("{\"result\":false,\"code\":11,\"errorMessage\":\"您未登录,请先登录\"}");
			pw.flush();
			pw.close();
		}
		return false;
	}
	   return true;
    }
}

4.在spring的配置文件中配置interceptor, 从而过滤所有的spring-mvc方法

<!-- lang: xml -->
<mvc:interceptors>
    <bean class="LoginAnnotationInterceptor"></bean>
</mvc:interceptors>

5.在需要权限控制的方法上加上Login注解, 从而告诉interceptor该方法需要登录检查

<!-- lang: java -->
@Login
@RequestMapping(value="/save.spr", method=RequestMethod.POST)
public ModelAndView save(SalesOrder salesOrder, HttpSession session) throws Exception {
    //您的代码...	
}

另外一个例子(ajax,Json)

<!-- lang: java -->
@Login(ResultTypeEnum.json)
@RequestMapping(value="/save.spr", method=RequestMethod.POST)
public ModelAndView save(SalesOrder salesOrder, HttpSession session) throws Exception {
    //您的代码...	
}

完成了!

###总结 此方法好处是比较方便, 在需要登录控制的地方,标注一下就可以了. 另外如果再做一些修改, 可以演变成基于annotation的权限控制, 我将在以后的文章中进行详细说明.
程序源代码

转载于:https://my.oschina.net/kingfire/blog/99992

### spring-mvc.xml 配置文件的作用及功能 `spring-mvc.xml` 是 Spring MVC 框架中的核心配置文件之一,主要用于定义与 Web 层相关的组件及其行为。以下是该文件的主要作用和功能: #### 1. 定义处理器映射 (Handler Mappings) `spring-mvc.xml` 可用于声明处理器映射器,这些映射器负责将请求 URL 映射到相应的控制器类或方法。常见的处理器映射器包括 `BeanNameUrlHandlerMapping` 和 `RequestMappingHandlerMapping`[^2]。 #### 2. 注册视图解析器 (View Resolvers) 为了实现模型数据向视图层的转换,`spring-mvc.xml` 中通常会注册视图解析器(如 `InternalResourceViewResolver` 或 `ThymeleafViewResolver`)。这使得框架能够根据逻辑视图名找到实际的物理资源文件,例如 JSP 页面或 Thymeleaf 模板[^1]。 ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` #### 3. 配置拦截器 (Interceptors) 通过 `spring-mvc.xml`,可以设置一组拦截器来处理特定路径下的请求预处理和后处理操作。这种机制常用于日志记录、权限验证等功能[^2]。 ```xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.example.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors> ``` #### 4. 启用注解驱动开发模式 启用基于注解的支持是现代 Spring MVC 应用程序的重要特性之一。此过程可以通过 `<mvc:annotation-driven>` 标签完成,从而简化 Controller 方法参数绑定以及 JSON/XML 数据交互的过程。 ```xml <mvc:annotation-driven/> ``` #### 5. 处理静态资源访问 如果项目中有大量的 CSS、JavaScript 或图片等公共资源,则可以在 `spring-mvc.xml` 中指定如何高效地提供此类资源的服务[^2]。 ```xml <mvc:resources mapping="/static/**" location="/resources/static/"/> ``` #### 6. 支持文件上传功能 当应用程序需要支持大文件传输时,在 `pom.xml` 添加依赖项的同时也需要调整 `spring-mvc.xml` 来适配 multipart 请求解析需求。 ```xml <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置最大允许上传大小 --> <property name="maxUploadSize" value="10485760"/> <!-- 10MB --> </bean> ``` 综上所述,`spring-mvc.xml` 不仅承载着整个前端控制流程的核心设定,还直接影响到了应用性能优化和服务扩展能力等方面的表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值