(三)基于SSM+Redis+Nginx+FastDFS的博客网站

上一篇主要介绍了SSM整合以及测试。


这一篇主要介绍登录模块,登录模块用到了过滤器,配置过滤器时需要在web.xml里面进行配置,相关配置已经在第二篇的web.xml有注明。


 本篇涉及的类有:控制层的LoginController、过滤器CheckLoginFilter以及数据库访问的。


  •  Controller层:如果登录成功,则将该用户设置到session里,然后结合前端JS判断该用户是否为空来显示遮罩层与否,并且设置session失效时间。用户密码存储到数据库时推荐使用MD5加密。

  • package com.tdrip.controller;
    
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.tdrip.model.util.ServiceResult;
    import com.tdrip.service.OperatorService;
    
    @RestController
    public class LoginController {
    	
    	@Autowired
    	private OperatorService operatorService;
    	@Autowired
    	private HttpSession session;
    
    	@RequestMapping(value = "/login/login", method=RequestMethod.POST)
    	public ServiceResult login(String password) {
    		ServiceResult serviceResult = operatorService.findById(password);
    		if (null != serviceResult.getData()) {
    			session.setAttribute("admin", serviceResult.getData());
    			//无活动10分钟后session失效
    			session.setMaxInactiveInterval(10*60);
    		}
    		return serviceResult;
    	}
    }
  • OperatorlService:操作员service,用于登录验证的serivce层
    package com.tdrip.service.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.tdrip.mapper.OperatorMapper;
    import com.tdrip.model.db.OperatorModel;
    import com.tdrip.model.util.ServiceResult;
    import com.tdrip.service.OperatorService;
    import com.tdrip.util.ToolUtil;
    
    @Service
    public class OperatorServiceImpl implements OperatorService {
    
    	@Autowired
    	private OperatorMapper operatorMapper;
    	
    	@Override
    	public ServiceResult findById(String password) {
    		String md5 = ToolUtil.getMD5(password);
    		OperatorModel model = operatorMapper.selectById(md5);
    		if (model != null) {
    			return ServiceResult.Return(model);
    		} 
    		return ServiceResult.Build(-1, "密码错误!");
    	}
    }
    

  • OperatorMapper接口:
    package com.tdrip.mapper;
    
    import org.springframework.stereotype.Repository;
    
    import com.tdrip.model.db.OperatorModel;
    
    @Repository
    public interface OperatorMapper {
    	public OperatorModel selectById(String id);
    	public OperatorModel selectLikeId(String id);
    	public int insert(OperatorModel model);
    }
    

  • OperatorMpper.xml:
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    
    <mapper namespace="com.tdrip.mapper.OperatorMapper">
    
    	<resultMap type="com.tdrip.model.db.OperatorModel" id="OperatorModelResult">
    		<id property="id" column="id" />
    		<result property="cutc" column="cutc" />
    		<result property="permission" column="permission" />
    	</resultMap>
    	
    	
    	<select id="selectById" resultMap="OperatorModelResult">
    		SELECT id, cutc, permission
    		FROM operator
    		WHERE id = #{id}
    	</select>
    	
    	<select id="selectLikeId" resultMap="OperatorModelResult">
    		SELECT id, permission
    		FROM operator
    		WHERE id like CONCAT('%',#{id},'%')  
    	</select>
    	
    	<insert id="insert">
    		INSERT INTO operator(id, cutc) values(#{id}, #{cutc})
    	</insert>
    
    	
    </mapper>

  • CheckLoginFilter:该类需要实现Filter接口,过滤的实现方法主要是doFilter。
    package com.tdrip.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class CheckLoginFilter implements Filter {
    
    	@Override
    	public void init(FilterConfig filterConfig) throws ServletException {
    		// TODO Auto-generated method stub
    
    	}
    
    	/**
    	 * 过滤流程:
    	 * 	1、如果访问的是主页index或者静态文件(css,js)之类的话直接访问通过
    	 * 	2、如果是登录请求或者查询全部内容请求则通过
    	 * 	3、不满足以上两点则需要用户进行登录。
    	 */
    	@Override
    	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
    			throws IOException, ServletException {
    
    		HttpServletRequest request = (HttpServletRequest) req;
    		HttpServletResponse response = (HttpServletResponse) res;
    		HttpSession session = request.getSession();
    
    		String requestURL = request.getRequestURI();
    		boolean conditionPass = requestURL.contains("/index") || requestURL.endsWith(".html") || requestURL.contains("/resource") ||
    								requestURL.endsWith(".js") || requestURL.endsWith(".css") || requestURL.endsWith(".ico");
    		if (conditionPass) {
    			chain.doFilter(request, response);
    		} else {
    			if (requestURL.contains("/login/login") || requestURL.endsWith("/content/findAll")) {
    				chain.doFilter(request, response);
    			} else {
    				 boolean loggedIn = session != null && session.getAttribute("admin") != null;
    				 if (loggedIn) {
    		            	chain.doFilter(request, response);
    				 } else {
    		            	request.getRequestDispatcher("index").forward(request, response);
    		         }
    			}
    			
    		}
    	}
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    
    	}
    
    }
    

PS:本篇介绍的是关于登录模块和过滤器。由于楼主之前还没接触过shiro框架,所以用的是基本的过滤器,有兴趣的小伙伴可以去看看shiro框架,关于登录验证权限方面的。楼主最近在整合自己到目前为止所学的东西到一个项目里,里面也用到了shiro,之后再推出。

 下一篇开始介绍redis,并整合到spring中。


猜你喜欢

转载自blog.csdn.net/sosmmh/article/details/79258390
今日推荐