您的位置:首页 > 其它

初学登录拦截器小例子

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>






笔记也好啦,要是有想要源代码的可以留言哦~啦啦啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: