需求:对登录进行验证,用户名cy 密码123456才能登录进去;

   登录进去后,将用户存在session中;

其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截;

com.cy.model.User.java:

package com.cy.model;

public class User {
private String userName;
private String password; public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }

com.cy.action.UserAction.java:

package com.cy.action;

import java.util.Map;

import com.cy.model.User;
import com.cy.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private static final long serialVersionUID = 1L; private User user;
private UserService userService = new UserService();
private String error; public String getError() {
return error;
} public void setError(String error) {
this.error = error;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String execute() throws Exception {
if(userService.login(user)){
ActionContext actionContext = ActionContext.getContext();
Map<String, Object> session = actionContext.getSession();
session.put("currentUser", user);
return SUCCESS;
}else{
this.error = "用户名或密码错误";
return ERROR;
}
} }

com.cy.action.GrilAction.java:

package com.cy.action;

import com.opensymphony.xwork2.ActionSupport;

public class GrilAction extends ActionSupport{
private static final long serialVersionUID = 1L; @Override
public String execute() throws Exception {
System.out.println("看美女");
return SUCCESS;
} }

com.cy.interceptor.LoginInterceptor.java:

package com.cy.interceptor;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class LoginInterceptor implements Interceptor{ private static final long serialVersionUID = 1L; public void destroy() {
System.out.println("LoginInterceptor销毁");
} public void init() {
System.out.println("LoginInterceptor初始化");
} public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("在Action执行之前");
ActionContext actionContext = invocation.getInvocationContext();
Map<String, Object> session = actionContext.getSession();
Object currentUser = session.get("currentUser");
String result = null;
if(currentUser != null){
result = invocation.invoke();
}else{
HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
request.setAttribute("error", "请先登录!");
result = "error";
} System.out.println("在Action执行之后"); return result;
} }

com.cy.service.UserService.java:

package com.cy.service;

import com.cy.model.User;

public class UserService {

    public boolean login(User user){
if("cy".equals(user.getUserName()) && "123456".equals(user.getPassword())){
return true;
}else{
return false;
}
}
}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="manage" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="loginInterceptor" class="com.cy.interceptor.LoginInterceptor"></interceptor> <interceptor-stack name="myStack">
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <!-- package默认使用myStack 这个包下面的每个action默认使用myStack拦截器栈-->
<default-interceptor-ref name="myStack"></default-interceptor-ref> <global-results>
<result name="error">error.jsp</result>
</global-results> <action name="gril" class="com.cy.action.GrilAction">
<result name="success">success.jsp</result> <!-- 定义了默认的拦截器栈,这里就注释掉
<interceptor-ref name="loginInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
-->
</action> <action name="user" class="com.cy.action.UserAction">
<result name="success">success.jsp</result>
<!-- 因为登录的时候不需要进行登录验证,不需要使用loginInterceptor
因此这里就写defaultStack
写了defaultStack action就不会再使用其他的拦截器了。
-->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> </package> </struts>

success.jsp:

<body>
当前用户: ${currentUser.userName}
</body>

error.jsp:

<body>
错误信息:${error} <a href="login.jsp">登录</a>
</body>

login.jsp:

<body>
<form action="user" method="post">
用户名: <input type="text" name="user.userName"/><br>
密码: <input type="text" name="user.password"/><br>
<input type="submit" value="登录" />
</form>
</body>

测试:

没有登录,直接访问gril链接:

进行登录,并且登录成功:

再次访问gril链接就ok了,console:

在Action执行之前
看美女
在Action执行之后

-------------

最新文章

  1. MMORPG大型游戏设计与开发(服务器 游戏场景 事件)
  2. sql数剧操作语言
  3. 日暮&middot;第一章&middot;决斗
  4. ahjesus Unity3D界面快捷键
  5. [SAP ABAP开发技术总结]采购、销售、生产简单业务流程
  6. webservice soapclient报错Error fetching http headers
  7. Session与Cookie
  8. windows win7 win10 多系统启动菜单 多系统引导设置
  9. delete、update忘加where条件误操作恢复过程演示
  10. VueJS搭建简单后台管理系统框架 (二) 模拟Ajax数据请求
  11. Microsoft Visual Studio 发展历史
  12. Mac tree命令的使用,输出目录树结构
  13. Spring学习-01
  14. python--异常捕获
  15. SVN创建分支/合并分支/切换分支
  16. java socket之传输实体类对象
  17. 将一个文件中的内容,在另一个文件中生成. for line in f1, \n f2.write(line)
  18. 使用 puppeteer 创建一个自动化导出 PDF 的服务
  19. CentOS下安装docker,docker-compose
  20. windows server 2003中端口默认不能使用问题

热门文章

  1. 数据存储-- Core Data的使用(一)
  2. 如何让VS2013编写的程序在xp下运行
  3. 添加机构organizations模块
  4. React之状态(state)与生命周期
  5. 《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
  6. Service的启动过程分析
  7. 自定义view:view的绘制流程
  8. 浅谈深度学习中的激活函数 - The Activation Function in Deep Learning
  9. 深度学习(六十六)生成模型、最大化似然、KL散度
  10. postgresql与Oracle:空字符串与null