初学登录拦截器小例子
2015-08-17 15:17
357 查看
今天是实习47天,终于把登录拦截器写好啦,作为笔记记录下(建的maven project)
1、先写好登录界面和非登录界面(即非login.action)
1)login.jsp,页面很普通,就是action需要了解,这里的action中login由约定大于配置可知对应LoginAction这个类,而loging.action对应类下loging()。
<%@ 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> <form action="login!loging.action"> 用户名:<input type="text" name="userName" id="userName"/><br/> 密码:<input type="password" name="password" id="password"/><br/> <input type="submit" value="提交"/> </form> </body> </html>
2)user-add.jsp
页面放在webapp/user下,对应Action放在**.web.user下(关于这些命名、放置规则可以了解struts2的convention),
**.web目录定义在struts.xml中
<constant name="struts.convention.package.locators.basePackage" value="com.cmcc.monitor.web" />关于struts的配置可以参考我的另一篇关于拦截器原理的博客http://blog.csdn.net/jqq_apple/article/details/47421237
<%@ 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> <title>添加用户信息界面</title> </head> <body> <form method="post" action="user!add.action"><!--UserAction下的add()方法--> <table> <tr> <td>用户名:<input type="text" name="userName" id="userName"></td> </tr> <tr> <td>年龄:<input type="text" name="userAge" id="userAge"></td> </tr> <tr> <td>地址:<input type="text" name="userAddress" id="userAddress"></td> </tr> <tr> <td><input type="submit" value="提交" style="background-color:pink"> <input type="reset" value="重置" style="background-color:red"></td> </tr> </table> </form> </body> </html>
3)登录成功界面,添加成功界面这里就省略了
4)LoginAction.java放在和login.jsp对应的路径上
package com.cmcc.db.web; import java.io.IOException; import java.util.Date; import com.cmcc.common.bean.CommonConstants; import com.cmcc.common.util.ParamUtil; import com.cmcc.common.util.SpringFactory; import com.cmcc.db.base.WebActionSupport; import com.cmcc.db.model.Admin; import com.cmcc.db.service.AdminService; public class LoginAction extends WebActionSupport{ @Override public String execute() { String returnUrl = ParamUtil.getStringParameter(request, "returnUrl", DEFAULT_RETURN_URL); request.setAttribute("returnUrl", returnUrl); return SUCCESS; }//给SUCCESS定义跳转到DEFAULT_RETURN_URL——设置的默认returnUrl路径 public void loging() { String userName = ParamUtil.getFilteredParameter(request, "userName", 0, ""); String password = ParamUtil.getFilteredParameter(request, "password", 0, ""); AdminService adminService=SpringFactory.getBean(AdminService.class); String pwd=adminService.selectPassWByName(userName); Admin user = new Admin(); user.setUserName(userName); user.setPassword(password); if(pwd.equals(password)){ String returnUrl = ParamUtil.getStringParameter(request, "returnUrl", DEFAULT_RETURN_URL); request.getSession().setAttribute(CommonConstants.USER_BIND, user); request.setAttribute("returnUrl", returnUrl); try { response.sendRedirect(returnUrl); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
5)UserAction.java同理放在和user-add.jsp下
package com.cmcc.db.web.user;
import java.io.IOException;
import com.cmcc.common.util.ParamUtil;
import com.cmcc.common.util.SpringFactory;
import com.cmcc.db.base.WebActionSupport;
import com.cmcc.db.dao.UserDao;
import com.cmcc.db.model.User;
import com.cmcc.db.service.UserService;
public class UserAction extends WebActionSupport{
public void add(){ String userName = ParamUtil.getFilteredParameter(request, "userName", 0, ""); Integer userAge = Integer.parseInt(ParamUtil.getFilteredParameter(request, "userAge", 0, "")); String userAddress = ParamUtil.getFilteredParameter(request, "userAddress", 0, ""); UserService userService=SpringFactory.getBean(UserService.class); User user=new User(); user.setUserName(userName); user.setUserAge(userAge); user.setUserAddress(userAddress); userService.addUser(user); String returnUrl = ParamUtil.getStringParameter(request, "returnUrl", DEFAULT_RETURN_URL); request.setAttribute("returnUrl", returnUrl); try { response.sendRedirect(returnUrl); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
6)WebActionSupport.java
package com.cmcc.db.base;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.cmcc.common.util.WebUtil;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;
@Results({ @Result(name = WebActionSupport.LOGIN, location = “/login.jsp”, type = “redirect”), @Result(name = WebActionSupport.ERROR, location = “/WEB-INF/jsp/error.jsp”) })
public class WebActionSupport extends ActionSupport implements ServletRequestAware, ServletResponseAware, Preparable {
protected HttpServletRequest request; protected HttpServletResponse response; public static final String DEFAULT_RETURN_URL = "index.jsp"; public static final String LOIGIN = "login"; @Override public void prepare() throws Exception { // TODO Auto-generated method stub request.setAttribute("loginReturnUrl", getEncodingURI());// /在此处设置登陆验证成功返回的url地址 } @Override public void setServletResponse(HttpServletResponse response) { this.response = response; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } public String getEncodingURI() throws Exception { return URLEncoder.encode(getFilteredRequestURI(request), "UTF-8"); } public String getFilteredRequestURI(HttpServletRequest request) { StringBuilder sb = new StringBuilder(request.getRequestURI()); if (request.getQueryString() != null) { sb.append("?").append(WebUtil.escapeParamString(request.getQueryString())); } return sb.toString(); }
}
注:其它用来和数据库连接实现登录和添加用户代码就略过了
7)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.convention.default.parent.package" value="cmcc-default" /> <constant name="struts.convention.package.locators" value="web" /> <constant name="struts.convention.package.locators.basePackage" value="com.cmcc.db.web" /> <constant name="struts.convention.result.path" value="/WEB-INF/jsp/"/> <constant name="struts.i18n.encoding" value="utf-8" /> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="cmcc-default" extends="convention-default"> <interceptors> <interceptor name="loginInter" class="com.cmcc.db.base.LoginInterceptor" /> <interceptor-stack name="webStack"> <interceptor-ref name="store"> <param name="operationMode">AUTOMATIC</param> </interceptor-ref> <interceptor-ref name="paramsPrepareParamsStack" /> <interceptor-ref name="loginInter" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="webStack" /> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error" /> </global-exception-mappings> </package> <!-- 使用Convention插件,实现约定大于配置的零配置文件风格. 特殊的Result路径在Action类中使用@Result设定. --> </struts>
8)LoginIntercepptor.java
package com.cmcc.db.base; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.cmcc.common.bean.CommonConstants; import com.cmcc.common.util.WebUtil; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; @SuppressWarnings("serial") public class LoginInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation arg0) throws Exception { HttpServletRequest request = (HttpServletRequest) arg0.getInvocationContext().get(ServletActionContext.HTTP_REQUEST); HttpServletResponse response = (HttpServletResponse) arg0.getInvocationContext().get(ServletActionContext.HTTP_RESPONSE); // 继承UserActionSupport的action需要进行权限验证 if (arg0.getAction() instanceof WebActionSupport) { Object o = request.getSession().getAttribute(CommonConstants.USER_BIND); ActionProxy proxy = arg0.getProxy(); String actionString = proxy.getNamespace() + "/" + proxy.getActionName() + "!" + proxy.getMethod() + ".action"; if (o == null) { if(actionString.startsWith("//login!loging.action")){ return arg0.invoke(); } // Ajax调用 if (actionString.startsWith("/user/user!list.action") || actionString.startsWith("/member/address!saveAddress.action")) { //其他action WebUtil.returnJSON(response, "{\"successSign\":false,\"errorMsg\":\"您尚未登录或登录已超时,请重新登录后操作\"}", "json"); return null; } else { return WebActionSupport.LOIGIN; } } else{ return arg0.invoke(); } } else { return arg0.invoke(); } } }
9)web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>MYBATISTEST</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/application*.xml</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <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> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
笔记也好啦,要是有想要源代码的可以留言哦~啦啦啦
相关文章推荐
- 购物框数量加减功能
- COCOS2D-JS的屏幕适配方案
- 裴波那数列的计算
- bson的操作
- poj 1836 Alignment
- JavaSE 面向对象内存图&静态变量内存图
- EventBus, otto, LocalBroadcast的选择
- 裴波那数列的计算
- chattr和lsattr命令
- 【算法之旅】——-算法初识
- 解决Android Webview 加载一些网页出现白板现象
- windows下安装gevent
- Eclipse代码整体后退或前移
- LINUX使用FTP搭建网络版YUM源
- Java 获取距离最近一段时间的时间点
- MFC中定时器的使用
- XML 特殊字符处理
- C# String与string的区别 以及 C# Swap string
- (7) <IED> eclipse-3.6.1-64安装反编译插件 JD_Eclipse插件
- Java初级培训笔记------容器 (3)