Web应用程序登录后的处理

摘自:http://caopeng.blog.违规广告.com/252164/46987

上次说了利用服务器进行登录的安全验证,在进行安全的服务器验证后,进入被保护的资源,例如welcome页面,现在的问题是,如果欢迎页面要求作一些数据操作,例如动态菜单等,可是我们登录提交的是j_security_check,这是系统自身完成的,应该如何完成这些工作呢?我采用的方法是将welcome-file指定为一个servlet,如下:


    /indexservlet
 
 
IndexServlet如下:
public class IndexServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=UTF-8";
    //Initialize global variables
    public void init() throws ServletException {
    }
    //Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        if (request.getUserPrincipal() != null) {
            String userid = request.getUserPrincipal().getName();
            IndexOperImpl per = new IndexOperImpl();
            Class cls = oper.getClass();
            InvocationHandler ds = new OperProxy(oper);
            IndexOperInterface peri = (IndexOperInterface) Proxy.
                                       newProxyInstance(cls.getClassLoader(),
                    cls.getInterfaces(), ds);
            UserQuery userquery = new UserQuery();
            userquery.setUser_id(userid);
            User user1 = operi.getUserInfo(userquery);
            MenuItemList menulist = operi.getMenuItemList(user1);
            WorkItemList worklist = operi.getWorkItemList(user1);
            if (user1 != null) {
                request.getSession().setAttribute("userid", user1.getUser_id());
                request.getSession().setAttribute("username",
                                                  user1.getUser_name());
                request.getSession().setAttribute("department",
                                                  user1.getUser_department());
            }
            if (menulist != null) {
                request.getSession().setAttribute("menulistbean",
                                                  menulist.getMenulist());
            }
            if (worklist != null) {
                request.getSession().setAttribute("worklistbean",
                                                  worklist.getWorkItemList());
            }
            response.sendRedirect(response.encodeRedirectURL("/index.jsp"));
        }
    }
    //Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws
            ServletException, IOException {
        doGet(request, response);
    }
    //Clean up resources
    public void destroy() {
    }
}
 
如上描述, request.getUserPrincipal().getName();方法获得登录后的用户编号,黄底色的是代理实现,这里的代理对象叫operi,使用getUserInfo(UserQuery userquery)方法从后台获取用户信息,getUserInfo是前后台接口方法UserQuery 是前后台数据传输的DTO.同样,workItemList和MenuItemList都是DTO,而getWorkItemList和getMenuItemList则是接口方法。将获得的数据存放在session里,最后,使用 response.sendRedirect(response.encodeRedirectURL("/index.jsp"));将页面定位到index.jsp,response.encodeRedirectURL重写方法可以防止因客户禁用cookie而导致sessionid不能传输的问题。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12928228/viewspace-438712/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12928228/viewspace-438712/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值