Spring+MyBatis实践——登录与权限控制

来源:互联网 发布:php高级培训 编辑:程序博客网 时间:2024/05/21 06:56

Spring+MyBatis实践——登录与权限控制

1、实现用户登录功能;

  通过session来实现用户登录功能。在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest的getSession方法获得。同时,HttpSession对象对应Jsp内置对象session,在jsp页面中也可以通过session来访问,如通过jstl标签库来访问session中的内容:

Html代码 复制代码 收藏代码
    1. <c:if test="${sessionScope.username == null}">  
    2.     <p class="navbar-text navbar-right"> <a href="./getLoginPage" class="navbar-link">登录</a></p>  
    3. </c:if>  

   通过判断session中的username是否为null,来决定是否显示标签p。

 

   登录功能实现代码;

Java代码 复制代码 收藏代码
    1. @RequestMapping(value="/login", method=RequestMethod.POST)  
    2. public String login(HttpServletRequest request, User user){  
    3.   
    4.     if(userService.validateUser(user)){ //验证用户名、密码是否匹配  
    5.         request.getSession().setAttribute(CrazySnailConstants.USER, user.getEmail()); //若匹配,则存放到session中  
    6.         return "index";  
    7.     }  
    8.       
    9.     request.getSession().setAttribute("errormsg""邮箱、密码不匹配,请重新输入");  
    10.     return "login";  //登录失败,返回登录页面  
    11. }  

   

  注:session数据是放在服务器上的,因而每次重新启动Tomcat时,session数据会被清空,需要重新登录。

 

2、通过Filter实现用户权限控制;

  通过在web.xml中配置Filter来对特定的用户请求进行过滤,判断当前session中是否存在用户登录的相关数据,若存在相关数据,则允许访问;否则提示用户登录。

 

  另外,tomcat默认配置中,session的默认有效期为30分钟,可通过查看apache-tomcat-7.0.53\conf\web.xml进行查看。也可以通过在web.xml中通过<session-config>来配置session的有效期。

Xml代码 复制代码 收藏代码
    1. <session-config>  
    2.     <session-timeout>30</session-timeout> <!-- 时间单位为分钟 -->  
    3. </session-config>  

  tomcat的会话超时可以在多个级别上设置:tomcat实例级别、Web应 用级别、servlet级别以及运行时Context代码级别。较低级别的设定会覆盖较高级别的设定。一般常用的是在前面两个级别上设置,分别在 /conf/web.xml和/webapps/yourapp/WEB-INF/web.xml。

 

权限控制实现:

  首先,过滤器类的实现;

Java代码 复制代码 收藏代码
    1. package com.crazysnail.filter;  
    2.   
    3. public class AuthenFilter implements Filter{  
    4.     private static Logger logger = Logger.getLogger(AuthenFilter.class);  
    5.     @Override  
    6.     public void destroy() {  
    7.           
    8.     }  
    9.     @Override  
    10.     public void <strong>doFilter</strong>(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  
    11.         HttpServletRequest httpServletRequest = (HttpServletRequest) request;  
    12.           
    13.         if(<strong>httpServletRequest.getSession().getAttribute(CrazySnailConstants.USER)!=null</strong>){ //判断session中是否存在用户登录的相关数据  
    14.             chain.doFilter(request, response);  
    15.         }else{  
    16.             httpServletRequest.getRequestDispatcher("./loginfail").forward(request, response);   //若不存在,则提示用户登录失败  
    17.         }  
    18.     }  
    19.     @Override  
    20.     public void init(FilterConfig arg0) throws ServletException {  
    21.     }  
    22. }  

   自定义过滤器类时,需要实现Filter接口,其中过滤机制的实现是在doFilter方法中。

 

  其次,在web.xml中添加过滤器配置;

Xml代码 复制代码 收藏代码
    1. <!-- 用户权限控制 -->  
    2. <filter>  
    3.     <filter-name>authenFilter</filter-name>  
    4.     <filter-class>com.crazysnail.filter.AuthenFilter</filter-class>  
    5. </filter>  
    6. <filter-mapping>  
    7.     <filter-name>authenFilter</filter-name>  
    8.     <url-pattern>/user/*</url-pattern>  
    9. </filter-mapping>  

   该过滤器,对URL路径中包含/user/的路径进行了过滤,进行权限验证,进而实现简单的权限控制功能。


1 0
原创粉丝点击