简单的利用Struts2拦截器实现权限校验
来源:互联网 发布:七天网络注册登录查分 编辑:程序博客网 时间:2024/05/22 07:49
本文主要在于介绍如何利用struts2去实现权限校验,对于struts2开发环境的搭建,网上已经有很多的教程,这里就不进行一一介绍了。
关于权限校验,首先需要注意的点:
1,在web项目中,在WEB-INF文件夹中的文件,直接访问时访问不了的,我们可以通过struts2中的action去访问。
2,拦截器与action的关系,是类似递归的关系,当然实际上不是(个人的理解,做成比喻,不恰当请大牛指正。),如我们访问action中,我们先要通过拦截器,再到action,执行完成后,再通过拦截器,最后才返回我们要return的参数。
3,使用的环境:struts-2.3.24.1,eclipse-jee-mars-2-win32-x86_64,jdk 1.8
实现权限校验的步骤原理:假如在拦截器里不调用invoke方法,那么拦截器里的值会返回到Struts.xml文件中的result,假如调用invoke方法,action中的值会返回到result中,利用这种机制可以验证登录。
也就是说通过拦截器,我们拦截到来自action的返回的参数,如果检测到登录成功,我们就放行,否则,我们返回的就是其他的值。
接下来就是具体的实现:
1,web.xml的代码:
路径:WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Struts2_study</display-name><filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping><welcome-file-list> <welcome-file>index.html</welcome-file></welcome-file-list></web-app>
2,struts.xml代码
路径:src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="false" /><constant name="struts.devMode" value="true" /><package name="default" extends="struts-default"> <!-- 注册拦截器 --> <interceptors> <interceptor name="gotomanageinterceptor"class="com.lbf.interceptors.GotoManageInterceptor"></interceptor> <!-- 自定义拦截器栈 --> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="gotomanageinterceptor"></interceptor-ref> </interceptor-stack> </interceptors> <action name="gotomanage" > <result name = "success">/WEB-INF/jsp/manage.jsp</result> <result name = "error">/login.jsp</result> <interceptor-ref name="mystack"></interceptor-ref> </action> <action name="login" class = "com.lbf.struts.GotoManage"> <result name = "success">/WEB-INF/jsp/manage.jsp</result> <result name = "error">/login.jsp</result> </action></package></struts>
3,创建登录页面login.jsp
路径:/login.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>登陆页面</title></head><body><p><a href="index.jsp">Home</a></p><form action="login.action" method="get"> <p>username: <input type="text" name="name" /></p> <p>password: <input type="password" name="psw" /></p> <p><input type = "submit" value = "登陆">${LoginError} </p></form></body></html>
4,创建访问的文件(假设是后台管理页面)manage.jsp
路径:WEB-INF/jsp/manage.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>后台管理页面</title></head><body><p>这是后台管理页面</p></body></html>
5,创建错误页面error.jsp(这个主要是我们可以在web项目中的struts.xml配置默认的错误页面,在这里为了简单,我没有进行配置)
路径:WEB-INF/jsp/error.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>错误页面</title> </head> <body> <p>这是错误页面</p> </body>
6,创建gotomanage.action的具体实现类GotoManage.java
路径:src/com/lbf/struts/GotoManage.java
package com.lbf.struts;import java.util.Map;import org.apache.struts2.interceptor.SessionAware;import com.opensymphony.xwork2.ActionSupport;public class GotoManage extends ActionSupport implements SessionAware{ private static final long serialVersionUID = 1L; private String name; private String psw; private Map<String, Object> session; public void setSession(Map<String, Object> session) { this.session = session; } @Override public String execute() throws Exception { if ("linbingfeng".equals(name)&&"123".equals(psw)) { session.put("LoginInfo", name); return SUCCESS; }else{ session.put("LoginError", "你没有权限查看"); return ERROR; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPsw() { return psw; } public void setPsw(String psw) { this.psw = psw; }}
7,创建拦截器的具体实现类GotoManageInterceptor.java
路径:src/com/lbf/interceptors/GotoManageInterceptor.java
package com.lbf.interceptors;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;public class GotoManageInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation invocation) throws Exception { //通过获取session来获得登录信息 ActionContext context = ActionContext.getContext(); Map<String, Object> session = context.getSession(); if (session.get("LoginInfo")!=null) { String result = invocation.invoke(); return result; }else{ return "error"; } }}
这个项目也许还有许多需要改善的地方,有什么错误的地方,还请大家一起来交流学习,我也是一个刚刚学习struts2不久。
- 简单的利用Struts2拦截器实现权限校验
- 利用注解加拦截器实现struts2的权限设置
- Struts2使用过滤器和拦截器进行简单权限校验
- Struts2使用过滤器和拦截器进行简单权限校验
- 简单的struts2权限拦截器应用
- struts2中利用拦截器实现权限管理
- 利用struts2拦截器加自定义注解实现权限控制
- Struts2 自定义拦截器 实现简单权限检查
- 自定义注解+Struts2拦截器实现简单权限控制
- 关于Struts2实现简单权限拦截功能
- Struts2中拦截器的简单实现
- Struts2拦截器校验
- struts2实现权限拦截
- struts2实现简单拦截器
- 使用Struts2的拦截器实现权限控制
- 使用Struts2的拦截器实现权限控制
- 用struts2拦截器实现权限检查
- 通过struts2拦截器实现权限管理
- Web前端开发-11
- hihoCoder Trie树
- 异常处理
- 1039
- 控制Asp.net的Button控件的提交动作
- 简单的利用Struts2拦截器实现权限校验
- Packet Tracer & 文件关联打开程序 & .desktop文件
- 第2周-项目3-小试循环
- NYOJ_5739最大岛屿(河南省第八届acm程序设计大赛)
- <Unity3D>Unity3D入门篇——第四讲 GUI控件(二)
- 使用Amoeba for mysql实现mysql读写分离
- 机器学习系列(2)_从初等数学视角解读逻辑回归
- c++基础——c++11中的新特性
- Python中的readlines函数读取到特殊字符时会截断导致文件读取不完整