Struts2拦截器实现登录权限控制(十二)
2017-12-27 17:32
736 查看
(一)拦截器实现权限控制
1.实现原理
1.用户登录成功后,把用户的信息保存到session对象中去。
2.拦截器获取Session对象中保存的User信息,判断user对象是否为空,如果为空跳转到登陆界面,如果不为空登录的用户,可以在自己的权内访问任何Action对象。
2.说明
Struts2的登录和权限控制 用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultStack。因为登录和访问权限拦截是全局的,拦截返回的结果有些也是全局的,所以我定义了自己的package以便引用。
3.实现步骤
1.创建表单
2.创建User类封装数据
3.创建LoginAction类和ShowAction,并使用Session保存User对象的数据
4.创建自定义拦截器类,获取Session对象保存的数据并判断。
5.在struts.xml文件中配置自定义拦截器。
(二)登录权限控制实例演示
1.创建表单
2.创建User类封装数据
3.创建LoginAction类
4.创建ShowAction类
5.创建自定义拦截器类
6.在struts.xml文件中配置自定义拦截器
7.结果演示
![](https://img-blog.csdn.net/20171227172907357?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM2Mjc5MzE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20171227172921581?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzM2Mjc5MzE4/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
注意:
1.未登录请求:http://localhost:8888/Project01/show,仍然跳转到原来页面。
2.登录后请求:http://localhost:8888/Project01/show,才能访问其他action。
1.实现原理
1.用户登录成功后,把用户的信息保存到session对象中去。
2.拦截器获取Session对象中保存的User信息,判断user对象是否为空,如果为空跳转到登陆界面,如果不为空登录的用户,可以在自己的权内访问任何Action对象。
2.说明
Struts2的登录和权限控制 用到的是拦截器,需要在struts.xml中配置,每个action都默认的继承defaultStack,如果你用了别的拦截器,还需要手动引入defaultStack。因为登录和访问权限拦截是全局的,拦截返回的结果有些也是全局的,所以我定义了自己的package以便引用。
3.实现步骤
1.创建表单
2.创建User类封装数据
3.创建LoginAction类和ShowAction,并使用Session保存User对象的数据
4.创建自定义拦截器类,获取Session对象保存的数据并判断。
5.在struts.xml文件中配置自定义拦截器。
(二)登录权限控制实例演示
1.创建表单
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!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" method="post"> 账号:<input type="text" name="user.username"/><br><br> 密码:<input type="password" name="user.password"/><br><br> <input type="submit" value="登陆"> <input type="reset" value="清空"> </form> </body> </html>
2.创建User类封装数据
package com.wang; public class User { private String username; private String password; setter和getter方法 }
3.创建LoginAction类
package com.wang; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private static final long serialVersionUID = 1L; private User user; public String excute(){ if(user.getUsername().equals("123")&&user.getPassword().equals("123")){ //1.保存登陆成功的用户数据 /*ServletActionContext.getRequest().getSession().setAttribute("User",user.getUsername()); ServletActionContext.getRequest().getSession().setAttribute("Pwd", user.getPassword());*/ ServletActionContext.getRequest().getSession().setAttribute("User", user); return Action.SUCCESS; } return Action.ERROR; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
4.创建ShowAction类
package com.wang; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public class ShowAction extends ActionSupport { private static final long serialVersionUID = 1L; public String show() { return Action.SUCCESS; } }
5.创建自定义拦截器类
package com.intercepter; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; //1.继承AbstractInterceptor,覆盖intercept()方法 public class MyIntercepter extends AbstractInterceptor{ private static final long serialVersionUID = 1L; @Override public String intercept(ActionInvocation invocation) throws Exception { /** * 1.判断是否是login,如果是执行下一个拦截器 * 2.如果不是判断是否登陆,如果登陆执行下一个拦截器 * 3.如果没有登陆就访问,那么就会跳转到登陆界面 */ String actionname=invocation.getProxy().getActionName(); //打印浏览器所访问的Action的url System.out.println("获取请求Action的url=="+actionname); if(actionname.equals("login")){ System.out.println("如果是提交表单请求action的url,那么放行!"); return invocation.invoke(); } Object obj=invocation.getInvocationContext().getSession().get("User"); //意味着没有登陆,属于非法,因此需要跳转到登陆首页 if(obj==null){ System.out.println("未经登陆的非法用户,请求其他action的URL,那么跳转到登陆界面"); return Action.LOGIN; } return invocation.invoke(); } }
6.在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.devMode" value="true" /> <package name="wang" namespace="/" extends="struts-default"> <!-- 1.自定义过滤器 --> <interceptors> <!-- 2.配置一个或多个拦截器 --> <interceptor name="myIntercepter" class="com.intercepter.MyIntercepter"/> <!-- 3.定义拦截器栈 --> <interceptor-stack name="mydefault"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="myIntercepter" /> </interceptor-stack> </interceptors> <!--4.配置默认拦截器,对整个包下的action都有效--> <default-interceptor-ref name="mydefault"/> <!--5.配置拦截器返回的逻辑视图--> <global-results> <result name="login">/index.jsp</result> </global-results> <action name="login" class="com.wang.LoginAction" method="excute"> <result>/success.jsp</result> <result name="error">/failure.jsp</result> </action> <!--6.如果用户非法登陆是无法访问到此路径下的show.jsp --> <action name="show" class="com.wang.ShowAction" method="show"> <result>/show.jsp</result> </action> </package> </struts>
7.结果演示
注意:
1.未登录请求:http://localhost:8888/Project01/show,仍然跳转到原来页面。
2.登录后请求:http://localhost:8888/Project01/show,才能访问其他action。
相关文章推荐
- Struts2拦截器 实现未登录拦截和权限控制
- [转载]Struts2拦截器 实现未登录拦截和权限控制
- Struts2拦截器 实现未登录拦截和权限控制
- Struts2实现登录权限访问控制
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- Struts2利用拦截器实现权限控制
- 使用Struts2的拦截器实现权限控制
- Struts2实现登录权限访问控制
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- struts2拦截器实现权限控制
- SSH学习——Struts2拦截器实现登录权限验证
- Struts2拦截器实现细颗粒权限控制
- Struts2 用拦截器实现最基本的登录权限认证。
- struts2 实现权限控制拦截器
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- struts2拦截器实现登录控制
- struts2 使用注解、反射、拦截器实现基于方法的权限控制
- Struts2的登录和权限控制用到的是拦截器
- 利用struts2拦截器加自定义注解实现权限控制