系统提升三:系统安全访问
数据安全分为两个级别:
用户身份认证: 对用户的访问和操作进行纷纷验证 只允许登陆地 有权限的用户进行合法的操作
用户数据加密: 对网络上传输的用户输入的数据进行加密 防止网络上的窃听者解密
第二种不是J3EE应用系统的编码所能解决的问题 它处于传输层 我们可以通过SSL进行网络数据的加密传输和认证
第一种是开发任何系统都应该考虑的问题
1 建立公用函数类BaseActionm.java
进行用户权限检查的代码通常都放在Action类的函数中 这种检查的函数被所有的Action类所共有 因此我们首先建立一个基类 BaseAction.java 它继承自Struts的DispatchAction
然后再该类中添加公用的函数 例如 保存Session对象的函数setSession() 从Session中取的对象的函数getSession() 从Session中取得用户名函数getUsername() 判断Session中某一个对象是否存在的函数i***istSession() 用户是否登录的函数isTimeout() 等
- package com.demo.struts.actions;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.struts.actions.DispatchAction;
- import com.demo.struts.util.Constants;
- public class BaseAction extends DispatchAction {
-
- /**
- * get username from session
- * @param request
- * @return
- */
- protected String getUsername(HttpServletRequest request) {
- return (String) request.getSession().getAttribute(
- Constants.USERNAME_KEY);
- }
-
- /**
- * check if user is timeout
- * @param request
- * @return
- */
- protected boolean isTimeout(HttpServletRequest request) {
- if (request.getSession().getAttribute(Constants.USERNAME_KEY) == null) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * save object in session
- * @param request
- * @param key
- * @param obj
- */
- protected void setSession(HttpServletRequest request, String key, Object obj) {
- request.getSession().setAttribute(key, obj);
- }
-
- /*
- * check if obj exists in session
- */
- protected boolean i***istSession(HttpServletRequest request, String key) {
- if (request.getSession().getAttribute(key) != null) {
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * get object from session
- * @param request
- * @param key
- * @return
- */
- protected Object getSession(HttpServletRequest request, String key) {
- return request.getSession().getAttribute(key);
- }
- }
将所有的Action类都集成该基类 这样在自己的Action类中即可使用这里的公用函数了
2 验证用户是否登录
在执行一个Action函数之前 判断用户是否登录 此时我们就可以使用BaseAction.java的isTimeout()函数了
首先在struts-config.xml的全局定义一个别名跳转到login.jsp 用于在用户为登录时跳转到该页面
- <global-forwards>
- <forward name="welcome" path="/welcome.do" />
- <forward name="login" path="/login.do" />
- <forward name="index" path="/login.jsp" />
- </global-forwards>
在Constans,java中定义一个Key值 赋值为上面定义的别名
- public final static String INDEX_KEY = "index";
在需要检验Session是否有效的Action中添加检查的代码 如在AddressAction和LogoutAction 首先需要修改他们的继承类为BaseAction.java 然后在每一个函数的最开始添加如下的代码 如果判读失败 那么就跳转到前面定义的登陆页
- public class AddressAction extends BaseAction {
- 。。。。
- public ActionForward back(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- if (isTimeout(request)) {
- return mapping.findForward(Constants.INDEX_KEY);
- }
- 。。。。
阅读(1834) | 评论(0) | 转发(0) |