使用拦截器实现权限控制
2017-10-18 16:37
363 查看
添加struts配置文件和jar包:点击工程名—-MyEclipse—Add Struts Capp…——-选择版本 —–next——–再回去配置以下Struts.xml文件
在struts.xml中写以下的配置
下面是4个开发模式常用配置的简介—
完成后去创建页面
struts.xml
使用拦截器进行用户权限验证:
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
@manager.jsp
后台管理页面。只有已登录的用户才能访问!
@struts.xml
@LoginAction.java
@AuthInterceptor.java
参考自视频:http://www.imooc.com/video/9143
在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"> <res 4000 ult>/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.1中使用注解和拦截器实现权限细粒度控制
- Spring MVC使用拦截器实现权限控制
- 【Spring MVC】教程——使用拦截器实现权限控制
- 在struts2.1中使用注解和拦截器实现权限细粒度控制
- 【Spring MVC】教程——使用拦截器实现权限控制
- Struts之使用拦截器实现的登录权限的控制
- 在struts2.3.4.1中使用注解、反射、拦截器实现基于方法的权限控制
- 使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)
- 【Spring MVC】教程——使用拦截器实现权限控制
- 使用Struts2的拦截器实现权限控制
- struts2 使用注解、反射、拦截器实现基于方法的权限控制
- struts2中使用session和拦截器控制权限
- java struts 2 使用拦截器完成权限控制
- Struts 2读书笔记-----拦截器之示例:使用拦截器完成权限控制
- 一款二级菜单和使用自定义标签实现简单权限控制
- Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
- 使用spring的ProxyFactoryBean来实现权限控制
- 在struts2中使用拦截器(Interceptor)控制登录和权限
- 用struts的拦截器实现用户权限控制