`
sw1982
  • 浏览: 511464 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Web项目中的登录验证思路

阅读更多

以前学习框架经常做登录页面的demo,输入正确的id+pwd就返回成功了。。可是这种模式无法阻止通过URL直接访问其他的页面,在一个非玩具系统中,控制未登录用户的页面访问权限是一个基本功能。

从实现思路讲,验证一个用户的有效登录,大多采用的是登入时候向Session写一个User认证信息,然后在访问每个页面前来判断Session中是否有认证信息。

if(session.get("User")==null

另外有很多网站提供记住登陆信息xx天,这种是结合了Cookie的认证信息存储。谈到这里,也可以仔细想想Cookie和Session的作用。比如卓越的购物车就是Cookie做的(因为关闭IE后再访问购物车还记得你的物品),而大多数群集Web服务器的信息也是采用Cookie(因为群集的Session同步开销很大),掌握了Cookie和Session的基本特性,这些都是理所当然的做法了。

一。下面说第一种拦截实现:基于javax.servlet.Filter

1.首先需要到web.xml注册一个filter

(这里是将authorityFilter这个类委托给spring来代理

<!-- authority filter proxy -->
<filter>   
        
<filter-name>authorityFilter</filter-name>   
        
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>   
        
<init-param>   
              
<param-name>targetFilterLifecycle</param-name>   
              
<param-value>true</param-value>   
        
</init-param>   
 
</filter>   
 
    <filter-mapping>
        
<filter-name>authorityFilter</filter-name>
        
<url-pattern>/*</url-pattern>
    
</filter-mapping>

2.写authorityFilter类(基于URL字符串的过滤实现) 

public class AuthorityFilter extends HttpServlet implements Filter ...{
    
private static final long serialVersionUID = 1L;
    
private static final Log log=LogFactory.getLog(AuthorityFilter.class);
    
public void init(FilterConfig arg0) throws ServletException ...{
        
//do something
    }

    
public void doFilter(ServletRequest sRequest, ServletResponse sResponse,    
            FilterChain filterChain) 
throws IOException, ServletException ...
        HttpServletRequest request 
= (HttpServletRequest) sRequest;    
        HttpServletResponse response 
= (HttpServletResponse) sResponse;    
        HttpSession session 
= request.getSession();    
        String url
=request.getServletPath();
        String contextPath
=request.getContextPath();
        
if(url.equals("/admin"))url+="/";
        
if(log.isDebugEnabled())
                log.debug(
"-----------------------"+url);
        
if((url.startsWith("/admin/")&&!url.startsWith("/admin/login")))...{//若访问后台资源
             Administartor adminUser=(Administartor)
                                     session.getAttribute(Constants.SESSION_ADMINISTRATOR);
             
if(adminUser==null)...{//转入管理员登陆页面
                  response.sendRedirect(contextPath+"/admin/login!input.action");
                  
return;
             }

        }

          filterChain.doFilter(sRequest, sResponse);  
    }

}

 

二。第二种权限过滤是基于struts2中Interceptor的概念

1.写过滤器类AuthorityInterceptor

public class AuthorityInterceptor extends AbstractInterceptor...{

    @Override
    
public String intercept(ActionInvocation invocation) throws Exception ...{
        
        ActionContext ctx 
= invocation.getInvocationContext();
        Map session 
= ctx.getSession();
        
//未登录,返回输入
        if(session.get("user")==null...{
            
return "input";
        }

        
//否则通过拦截
        return invocation.invoke();
    }


}

2.配置result结果

将自己写的拦截器和defaultStack组合成myStack,并且配置成默认拦截器!为了避免拦截登录页面,将登陆Action显式的配置<interceptor-ref name="defaultStack"/>,从而不使用默认的myStack拦截自己。

<struts>
    
<package name="webMail" extends="struts-default" namespace="/webMail">
    
<interceptors>
        
<interceptor name="authority" class="com.decentsoft.commons.security.AuthorityInterceptor"/>
        
<interceptor-stack name="myStack">
            
<interceptor-ref name="defaultStack"/>
            
<interceptor-ref name="authority"/>
        
</interceptor-stack>
    
</interceptors>
    
<default-interceptor-ref name="myStack"></default-interceptor-ref>
    
<global-results>
        
<result name="input" type="redirect">/WEB-INF/page/webMail/portal.jsp</result>
    
</global-results>

    
<action name="indexAction" class="com.mail.action.MailStatisticAction">
              
<result name="portal">/WEB-INF/page/webMail/portal.jsp</result>
              
<result name="login" type="chain">
                
<param name="actionName">webMailAction</param>
                
<param name="namespace">/webMail</param>
                
<param name="method">mailIndex</param>
              
</result>
              
<interceptor-ref name="defaultStack"/>
        
</action>
    
</package>
</struts>

3.MailStatisticAction的登录方法实现大概如下:根据校验结果返回登录或者进入页面

    /** *//**
     * 通行证
     * 
@return
     
*/

    
public String portal() ...{
        
        
//登录时候验证用户,并且将用户信息放到session!
        if(condition)) ...{
            MailUser user 
= new MailUser("x","x");
            session.put(
"user", user);
            
return "login";
        }

        
return "portal";
    }

三。第三种权限过滤是spring中的Acegi安全系统,这个功能很强大,有模型。在《spring in Action》有介绍,没有仔细研究过。


 

p.s Acegi 系统已经由spring独立作为一个子项目发布了,名字叫“security”。官方地址在:http://static.springframework.org/spring-security/site/index.html. 

这是一整套的安全解决方案,不仅仅只是登陆验证,还可以用来做复杂的权限模型


Spring Security

Formerly the Acegi Security System for Spring, Spring Security provides powerful and flexible security solutions for enterprise applications developed using the Spring Framework. It is a stable and mature product - Acegi Security 1.0.0 was released in May 2006 after more than two and a half years of use in large production software projects and adopted as an official Spring sub-project on its release.

Spring Security 2.0.0 builds on Acegi Security's solid foundations, adding many new features:

  • Simplified namespace-based configuration syntax. Old configurations could require hundreds of lines of XML but our new convention over configuration approach ensures that many deployments will now require less than 10 lines.
  • OpenID integration, which is the web's emerging single sign on standard (supported by Google, IBM, Sun, Yahoo and others)
  • Windows NTLM support, providing easy enterprise-wide single sign on against Windows corporate networks
  • Support for JSR 250 ("EJB 3") security annotations, delivering a standards-based model for authorization metadata
  • AspectJ pointcut expression language support, allowing developers to apply cross-cutting security logic across their Spring managed objects
  • Substantial improvements to the high-performance domain object instance security ("ACL") capabilities
  • Comprehensive support for RESTful web request authorization, which works well with Spring 2.5's @MVC model for building RESTful systems
  • Long-requested support for groups, hierarchical roles and a user management API, which all combine to reduce development time and significantly improve system administration
  • An improved, database-backed "remember me" implementation
  • Support for portlet authentication out-of-the-box
  • Support for additional languages
  • Numerous other general improvements, documentation and new samples
  • New support for web state and flow transition authorization through the Spring Web Flow 2.0 release
  • New support for visualizing secured methods, plus configuration auto-completion support in Spring IDE
  • Enhanced WSS (formerly WS-Security) support through the Spring Web Services 1.5 release
  • Updated support for CAS single sign-on (CAS 3 is now supported).
分享到:
评论

相关推荐

    Web项目中的SQL注入问题研究与防范方法.pdf

    在测试和验证阶段,将所提出的防范思路和方法应用在实际的Web项目中。测试结果表明,所构建的防范模型在实用性和安全性方面都表现较高。通过模型验证,可以确保Web应用程序能够有效抵御SQL注入攻击,提升应用整体的...

    简易的web项目——宿舍管理系统(包含注册,登录,首页等)

    这个web项目一共撰写了大概十几个界面的代码,其中主要由首页、注册、登录以及几个锚链接对应的功能实现界面和单独的新闻界面所构成。同时我们把每个具体的css及JavaScript功能注释都放到了代码之前。 首页界面 ...

    小型WEB项目开发(阶段项目三)_设计说明书模板

    在小型WEB项目开发中,设计说明书是至关重要的文档,它详尽地记录了项目的规划、设计、实现和测试过程。这份设计说明书模板适用于阶段项目三,主要关注B/S(浏览器/服务器)结构的管理信息系统开发,旨在提升学生的...

    web 翻页测试设计思路

    ### Web翻页测试设计思路详解 #### 一、引言 在Web应用开发过程中,页面翻页功能是非常常见且重要的一个部分。用户通过翻页来查看更多内容或数据,因此确保翻页功能的稳定性和准确性对于提升用户体验至关重要。...

    过滤器验证用户登录.rar

    在这个"过滤器验证用户登录"项目中,我们关注的是如何利用过滤器来实现用户身份的验证,确保只有已登录的用户才能访问特定的Web资源。这个项目结合了IntelliJ IDEA这一强大的Java开发工具,为开发者提供了高效且专业...

    Web前端大作业.zip

    1. **Web大作业.docx**:这是一个文档文件,很可能包含了项目的需求说明、设计思路、技术选型以及注意事项等内容。在开始项目之前,详细阅读这份文档至关重要,它能帮助我们理解项目的整体框架和实现细节。 2. **...

    web项目shopping 后台实现

    首先,Web项目的基石是服务器端开发,通常采用Java或Python等后端编程语言。在"shopping"项目中,很可能采用了Java,因为Java在企业级应用中广泛应用,具有良好的可维护性和性能。开发者可能使用Spring Boot框架来...

    【ASP.NET编程知识】ASP.NET通用权限验证的实现代码思路.docx

    ASP.NET 通用权限验证的实现代码思路 ...本文提供了 ASP.NET 通用权限验证的实现代码思路,涵盖了权限验证的整个过程,旨在帮助开发者更好地理解权限验证的实现机理,并能够更好地应用于实际项目中。

    web项目(房屋租赁系统)

    通过深入分析这个房屋租赁系统,不仅可以学习到Web开发的基础知识,还能掌握如何将这些知识应用于实际项目中,比如数据库设计、前后端通信、用户认证和权限控制等。对于初学者而言,这是一个极好的实践案例,可以...

    java Web实现用户登录功能.txt

    - 在 `doPost` 方法中处理登录数据,并根据验证结果重定向到相应的页面。 4. **创建登录成功页面**:步骤同上。 5. **创建登录失败页面**:步骤同上。 6. **编辑项目首页**:步骤同上。 ##### (三)测试结果 - ...

    Axure-web元件库大全.rar

    2. **Web元件**:在Web设计中,元件通常指的是网页上可见的交互元素,如头部、导航栏、侧边栏、内容区域、页脚等。这些元件在Axure中都可找到对应的模板,便于设计师快速构建页面结构。 3. **原型设计**:Axure允许...

    Java web项目源码讯友网络相册.zip

    【Java Web项目源码讯友网络相册】是一个典型的基于Java技术栈的Web应用程序,用于实现网络相册功能。这个项目对于学习Java Web开发、理解Web应用架构以及实践MVC设计模式具有很高的参考价值。通过分析这个项目的...

    基于web开发的学生公寓管理系统

    课程设计报告可能详细阐述了系统的设计思路、技术选型、开发过程、遇到的问题及解决方案,有助于读者深入理解项目的全貌。通过阅读报告,学习者可以了解到如何将理论知识应用到实际项目中,提升实践能力。 【标签】...

    Android 通过Android客户端访问web服务器,实现一个登录功能,服务端+数据库+安卓端-IT计算机-毕业设计.zip

    这篇毕业设计项目主要展示了如何利用Android客户端访问web服务器来实现一个登录功能,涵盖了服务端、数据库以及Android端的完整流程。下面将详细讲解这个过程中的关键知识点。 首先,我们需要了解Android客户端开发...

    BlueHill 人事管理系统(Web部分)项目C#.NET源代码 ASP.NET课程设计

    通过阅读和理解这部分内容,学习者可以了解项目的全貌,掌握如何从无到有地构建一个Web应用,包括需求收集、系统架构设计、数据库设计、编程实现、调试优化和测试验证等环节。 在提供的文件"BlueHill人事管理系统_...

    Asp.net MVC简单跨站登录的实现思路

    在现代Web开发中,用户经常在多个网站之间切换,例如从电子商务网站跳转到社交媒体平台,期望能够保持一致的登录状态,这就是跨站登录(Single Sign-On, SSO)的需求。本文将详细介绍在ASP.NET MVC中实现简单跨站...

    Java web项目-都市供求信息网

    【都市供求信息网】是一个基于Java Web...以上只是基于一般Java Web项目的常见技术栈和设计思路,具体实现可能会根据项目需求和团队选择有所不同。在实际项目中,还可能涉及到缓存策略、负载均衡、性能优化等多个方面。

    javaWeb网上书城项目源码_前端设计源码_WebRoot.zip

    在这个项目中,WebRoot中的文件结构和内容至关重要,因为它直接影响到用户在浏览器中看到的界面和交互效果。 1. HTML页面:HTML(HyperText Markup Language)是网页的基础,用于构建网页的结构。在WebRoot下,我们...

    javaweb手机短信验证

    JavaWeb手机短信验证项目是一个基于Java技术实现的用于用户身份...综上所述,JavaWeb手机短信验证项目是一个典型的Web应用案例,涵盖了JavaWeb开发的多个关键环节,对于学习和理解JavaWeb开发流程具有很高的实践价值。

    WEB服务器项目源码.rar

    在WEB服务器项目源码中,我们可以期待看到以下几个关键部分: 1. **主程序文件**:通常包含服务器的启动逻辑,如监听网络端口、接收客户端请求等。 2. **路由处理**:这部分代码负责解析HTTP请求中的URL,根据不同...

Global site tag (gtag.js) - Google Analytics