使用拦截器实现权限控制
来源:互联网 发布:lol淘宝cdk是真的吗 编辑:程序博客网 时间:2024/05/16 17:06
添加struts配置文件和jar包:点击工程名—-MyEclipse—Add Struts Capp…——-选择版本 —–next——–再回去配置以下Struts.xml文件
在struts.xml中写以下的配置
下面是4个开发模式常用配置的简介—
<!-- 开启使用开发模式,详细错误提示 --> <!-- <constant name="struts.devMode" value="true"/>--> <!-- 指定每次请求到达,重新加载资源文件 --> <!-- <constant name="struts.i18n.reload" value="true"/>--> <!-- 指定每次配置文件更改后,自动重新加载 --> <!-- <constant name="struts.configuration.xml.reload" value="true"/>--> <!-- 指定XSLT Result使用样式表缓存 --> <!-- <constant name="struts.xslt.nocache" value="true"/>-->
完成后去创建页面
struts.xml
<struts><constant name=”struts.enable.DynamicMethodInvocation” value=”false”/><constant name=”struts.devMode” value=”true”/><package name=”default” namespace=”/” extends=”struts-default” > 通过此Action访问后台管理页面 <action name=”auth”> <result>/WEB-INF/page/manager.jsp</result> </action></package></struts>
使用拦截器进行用户权限验证:
1.创建被访问的资源(如后台管理页面manager.jsp),将其放到WEB-INF下(外部不能直接访问)
2.创建authAction将请求转发到被访问的资源(manager.jsp)
3.创建登录页面login.jsp接收用户登录信息
4.创建loginAction处理登录请求,校验登录信息并将有效登录信息或错误信息放到session中(其中有效登录信息loginInfo用于步骤5拦截器校验会话信息,错误信息用于前台页面展示)
5.创建拦截器authInterceptor对访问authAction的请求进行拦截处理,通过ActionContext获取会话session,并校验session的登录信息,如果不为空,即获取权限,放行,否则拦截并转发到登录界面
总结:如果只是一次登录的话,这里的2和5确实看起来很多余,但这个功能实际是为了多页面访问时校验同一个session下是否有权限,因此使用了2个action进行请求转发,当第一次登录之后,用户只需要直接访问authAction就可以访问到后台资源,无需再次登录。
注意:WEB-INF是Java的WEB应用的安全目录,所谓的安全就是客户端无法访问,只有服务端可以访问的目录。WEB-INF里的文件默认情况下是不允许被外部直接访问的,可以通过action间接来访问,如果action的class不写,则默认是ActionSupport这个类。
@login.jsp
信息:${session_error}<form action="Login" method="post"><!-- 默认情况下:Login.action或Login都行。 -->用户名:<input name="user" type="text" />密码:<input name="pwd" type="password" /><input value="Login" type="submit" /></form>
@manager.jsp
后台管理页面。只有已登录的用户才能访问!
@struts.xml
<struts><package name="default" extends="struts-default" namespace="/"><!-- 注册拦截器 --><!-- Ps:拦截器栈内的拦截器(除了默认拦截器)的name要与拦截器栈外的拦截器要一致,因为引用拦截器栈的时候,里面的拦截器是从外面的拦截器中的class引用的 --><interceptors><interceptor name="AuthI" class="com.imooc.interceptor.AuthInterceptor"></interceptor><!-- 自定义拦截器mystack:组合了defaultStack和AuthI --><interceptor-stack name="mystack"><interceptor-ref name="defaultStack"></interceptor-ref><interceptor-ref name="AuthI"></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.imooc.action.LoginAction" method="login"> <result>/WEB-INF/page/manager.jsp</result> <result name="error">/login.jsp</result> </action> </package></struts>
@LoginAction.java
public class LoginAction extends ActionSupport implements SessionAware{ private String user; private String pwd; private Map<String,Object> session; public void setSession(Map<String, Object> session) { this.session=session; } // setter/getter... public String login(){ if("admin".equals(user)&&"admin".equals(pwd)){ session.put("session_user", user); return SUCCESS; }else{ session.put("session_error", "用户名或密码不正确!"); return ERROR; } }}
@AuthInterceptor.java
public class AuthInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { ActionContext context=ActionContext.getContext(); Map<String , Object> session=context.getSession(); if(session.get("session_user")!=null){ String result=invocation.invoke(); return result; }else{ return "login"; } }}
参考自视频:http://www.imooc.com/video/9143
- 使用拦截器实现权限控制
- 使用Struts2的拦截器实现权限控制
- 使用Struts2的拦截器实现权限控制
- Spring MVC使用拦截器实现权限控制
- 使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)
- struts2 实现权限控制拦截器
- struts2拦截器实现权限控制
- Struts实现的权限控制拦截器
- 拦截器示例 : 实现权限控制
- struts2拦截器实现权限控制
- 自定义注解+拦截器实现权限控制
- CXF自定义拦截器实现权限控制
- WebService拦截器实现权限控制
- 自定义注解+拦截器实现权限控制
- Struts2—拦截器实现权限控制
- struts2拦截器实现权限控制
- 使用拦截器完成权限控制
- 使用拦截器进行权限的控制
- django提交表单提示"You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SL
- 动态规划hard--639. Decode Ways II
- AndroidStudio怎样导入jar
- 一些简单的java,c程序
- [CDH--FAQ]--常见问答
- 使用拦截器实现权限控制
- vue学习记录(数据绑定、class,style绑定)
- Spring MVC Data Binding
- Nginx入门学习
- 程序在eclipse中可以运行,在脚本(命令行)中报错
- jvm详解
- Android页面去头设置
- Android应用内跳转Scheme协议
- ajax跨域问题