Struts2案例--开发权限验证拦截器
2016-10-12 15:34
423 查看
一个管理页面,用户必须登录才能进行操作,未登录不可操作。
创建项目struts-authInterceptor。
web.xml:
登录页面login.jsp:
LoginAction.java:
拦截器AuthInterceptor.java:
struts.xml:
登录成功显示的管理页面manager.jsp:
运行:http://localhost:8080/struts-authInterceptor/auth
点击登录:
在session中已经保存了用户信息,这时在浏览器输入http://localhost:8080/struts-authInterceptor/auth仍然显示后台管理页面
若用户名或密码输入错误:
创建项目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自定义拦截器实例—登陆权限验证
- struts2通过拦截器实现用户权限验证
- Struts2自定义拦截器实例—登陆权限验证
- Struts2自己定义拦截器实例—登陆权限验证
- struts2自定义拦截器一——模拟登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证
- struts2自定义拦截器一――模拟登陆权限验证
- Struts2自己定义拦截器实例—登陆权限验证
- struts2 使用拦截器 实现用户权限的验证
- Struts2自己定义拦截器实例—登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证+验证框架
- struts2 拦截器 登录权限验证
- Struts2自定义拦截器实例—登陆权限验证
- Struts2 权限验证 ---拦截器和过滤器
- Struts2自定义拦截器实例—登陆权限验证
- Struts2自定义拦截器实例—登陆权限验证
- Struts2自己定义拦截器实例—登陆权限验证
- Struts2自己定义拦截器实例—登陆权限验证
- Struts2自己定义拦截器实例—登陆权限验证