您的位置:首页 > 编程语言 > Java开发

Struts2案例--开发权限验证拦截器

2016-10-12 15:34 423 查看
一个管理页面,用户必须登录才能进行操作,未登录不可操作。

创建项目struts-authInterceptor。

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>struts-authInterceptor</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<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>
</web-app>


登录页面login.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
<h2>用户登录</h2>
${loginError }
<form action="login.action" method="post">
用户名:<input type="text" name="username" /><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录" />
</form>
</body>
</html>


LoginAction.java:

package com.action;

import java.util.Map;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport implements SessionAware{ //实现接口来得到session
private String username; //接收客户端提交的用户名和密码
private String password;
private Map<String, Object> session; //session存储用户信息

public void setSession(Map<String, Object> session) {
this.session=session;
}
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;
}

//处理登录请求
public String login(){
if("admin".equals(username) && "123".equals(password)){
session.put("loginInfo", username);
return SUCCESS;
}else {
session.put("loginError", "用户名或密码不正确!");
return ERROR;
}
}
}


拦截器AuthInterceptor.java:

package com.interceptor;

import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class AuthInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
//ActionContext:action的上下文
ActionContext context=ActionContext.getContext();
//获取session
Map<String, Object> session=context.getSession();
if(session.get("loginInfo")!=null){ //值不为空,表示用户已登录
String result=invocation.invoke(); //调用目标action,返回字符串
return result;
}else{  //用户未登录
return "login"; //表示需要登录
}
}

}


struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
<constant name="struts.devMode" value="true"></constant>

<package name="default" namespace="/" extends="struts-default">

<!-- 注册拦截器 -->
<interceptors>
<interceptor name="auth" class="com.interceptor.AuthInterceptor"></interceptor>
<!-- 自定义拦截器栈myStack,组合了defaultStack和auth -->
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="auth"></interceptor-ref>
</interceptor-stack>
</interceptors>

<!-- 通过此Action访问后台管理页面 ,需要判断用户是否已登录,如果未登录则跳转到登录页面-->
<action name="auth">
<result>/WEB-INF/page/manager.jsp</result>
<result name="login">/login.jsp</result>
<!-- 引用自定义的拦截器栈 -->
<interceptor-ref name="myStack"></interceptor-ref>
</action>

<action name="login" class="com.action.LoginAction" method="login">
<result>/WEB-INF/page/manager.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>


登录成功显示的管理页面manager.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
后台管理页面,只有已登录的用户才能访问!
</body>
</html>


运行:http://localhost:8080/struts-authInterceptor/auth



点击登录:



在session中已经保存了用户信息,这时在浏览器输入http://localhost:8080/struts-authInterceptor/auth仍然显示后台管理页面



若用户名或密码输入错误:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts2.0