spring4+hibernate4+springmvc+nginx+redis实现session共享

开发工具: intellJ idea

框架版本:spring4.3,hibernate4.3

新建maven项目,项目结构如下图:

直接上代码:

User.java:

package com.ssh.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

/**
 * Created by forwor on 2018/8/27.
 */
@Entity
@Table(name="T_USER")
public class User {

    @Id
    @GeneratedValue(generator="id")
    @GenericGenerator(name = "id",strategy="identity")
    private Integer id;

    @Column(name="user_name")
    private String userName;

    @Column(name="password")
    private String password;

    @Column(name="age")
    private int age;


    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

==================================================================================================

IUserDao.java:

package com.ssh.entity.dao;

import com.ssh.entity.User;

/**
 * Created by forwor on 2018/8/27.
 */
public interface IUserDao {
    public User getUserInfoByName(String name);
}

==================================================================================================

UserDao.java:

package com.ssh.entity.dao.impl;

import com.ssh.entity.User;
import com.ssh.entity.dao.IUserDao;
import com.util.base.BaseDao;
import org.springframework.stereotype.Repository;
import org.hibernate.Query;
import org.springframework.transaction.annotation.Propagation;


/**
 * Created by forwor on 2018/8/27.
 */
@Repository("userDao")
public class UserDao extends BaseDao implements IUserDao {
    public User getUserInfoByName(String name) {
        String hql = "from User where userName = '"+name+"'";
        Query query = sessionFactory.getCurrentSession().createQuery(hql);
        return (User) query.uniqueResult();
    }
}

=================================================================================================

BaseDao.java

package com.util.base;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;

import java.io.Serializable;

/**
 * Created by forwor on 2018/8/27.
 */
public class BaseDao {
    @Autowired
    protected SessionFactory sessionFactory;

    public Session getSession(){
        return sessionFactory.openSession();
    }
}

================================================================================================

LoginController.java:


package com.ssh.loginmana.action;

import com.ssh.entity.User;
import com.ssh.loginmana.ser.ILoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.UUID;

/**
 * Created by forwor on 2018/8/27.
 */
@Controller
public class LoginController {
    @Autowired
    private ILoginService loginService;

   // Log log = LogFactory.getLog(this.getClass());

    @RequestMapping(value="/login", method= RequestMethod.POST)
    public String login(@ModelAttribute User user, Model model, HttpSession session, HttpServletRequest request) {
        if(user.getUserName() == null || user.getPassword() == null) {
            return "failure";
        }
        System.out.println("---------------"+user.getUserName());
        User loginUser = loginService.getUserInfoByName(user.getUserName());
        if (loginUser == null) {
            model.addAttribute("error", true);
            model.addAttribute("message", "用户不存在。");
            return "failure";
        }

        if(!user.getPassword().equals(loginUser.getPassword())) {
            model.addAttribute("error", true);
            model.addAttribute("message", "用户名或密码错误。");
            return "failure";
        }

        //request.getSession().setAttribute("USER", user);
        String token = UUID.randomUUID().toString();
        System.out.println(token);
        session.setAttribute("id", token);
        session.setAttribute("login", true);
        session.setAttribute("token", token);
        session.setAttribute("loginDate",new Date());
        session.setAttribute(user.getUserName(), token);
        return "login_success";
    }

    @RequestMapping(value="/login",method=RequestMethod.GET)
    public String login(Model model) throws Exception{
        model.addAttribute("", new User());
        return "login";
    }
}

===============================================================================================

ILoginService.java:

package com.ssh.loginmana.ser;

import com.ssh.entity.User;

/**
 * Created by forwor on 2018/8/27.
 */
public interface ILoginService {
    public User getUserInfoByName(String name);
}

===============================================================================================

LoginService.java:

package com.ssh.loginmana.ser.impl;

import com.ssh.entity.User;
import com.ssh.entity.dao.IUserDao;
import com.ssh.loginmana.ser.ILoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Created by forwor on 2018/8/27.
 */
@Service("loginService")
public class LoginService implements ILoginService {
    @Autowired
    private IUserDao userDao;

    public User getUserInfoByName(String name){
        return userDao.getUserInfoByName(name);
    }
}

==================================================================================================

login.jsp

<%--
  Created by IntelliJ IDEA.
  User: forwor
  Date: 2018/8/27
  Time: 17:32
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登陆</title>
</head>
<body>
<form action="login.fw" method="post">
    <p>这里是8181端口</p>

    <%
        String[] up = {};
        //获取所有的cookie信息
        Cookie[] cookies = request.getCookies();
        //遍历cookies
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("userInfo")) {
                    String ui = cookie.getValue(); //zhangsan:123
                    up = ui.split(":");
                }
            }
        }
    %>

    用户名:<input type="text" name="userName" value="lien"><br>
    密码:<input type="text" name="password" value="123456"><br>
    <input type="submit" value="登陆">
</form>
</body>
</html>

================================================================================================

login-success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登陆成功</title>
</head>
<body>
登陆成功,当前位于Tomcat7页面
<BR>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>
LoginTime:<%=session.getAttribute("loginDate")%>
</body>
</html>

=================================================================================================

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <welcome-file-list>
        <welcome-file>jsp/login.jsp</welcome-file>
    </welcome-file-list>
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>

    <!--加载Spring的配置文件到上下文中去-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:applicationContext.xml
        </param-value>
    </context-param>

    <!-- spring MVC config start-->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!-- 此处指向的的是SpringMVC的配置文件 -->
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!--配置容器在启动的时候就加载这个servlet并实例化-->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.fw</url-pattern>
    </servlet-mapping>
    <!-- spring MVC config end-->


    <!-- Spring监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--  字符集过滤  -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>Scutiry Filter</filter-name>
        <filter-class>com.ssh.sysmana.SecuFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>Scutiry Filter</filter-name>
        <url-pattern>*.fw</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>SpringOpenSessionInViewFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SpringOpenSessionInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

================================================================================================

依赖包: pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.forwor</groupId>
    <artifactId>ssh_nginx_redis_session</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 本人将配置包的版本信息都统一放入此处,方便以后管理-->
    <properties>
        <spring.version>4.3.1.RELEASE</spring.version>
        <hibernateVersion>4.3.5.Final</hibernateVersion>
        <jstlVersion>1.2</jstlVersion>
        <taglibVersion>1.1.2</taglibVersion>
        <servletVersion>3.0-alpha-1</servletVersion>
        <jsonVersion>1.9.8</jsonVersion>
        <jacksonVersion>2.5.0</jacksonVersion>
        <mysqlVersion>5.1.38</mysqlVersion>
        <c3p0Version>0.9.1.2</c3p0Version>
        <log4jVersion>1.2.17</log4jVersion>
        <fileuploadVersion>1.3.1</fileuploadVersion>
        <lombokVersion>1.16.10</lombokVersion>
    </properties>

    <dependencies>
        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!--spring start-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>3.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring end-->

        <!-- hibernate配置-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernateVersion}</version>
        </dependency>

        <!-- hibernate 缓存, 视情况添加-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${hibernateVersion}</version>
        </dependency>

        <!-- jsp页面使用的jstl支持-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstlVersion}</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>${taglibVersion}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servletVersion}</version>
            <scope>provided</scope>
        </dependency>

        <!-- DataBase数据库连接 mysql包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysqlVersion}</version>
        </dependency>

        <!-- 数据库连接池-->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>${c3p0Version}</version>
        </dependency>

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <!-- json数据 使springMVC可以返回json值 ,视情况添加-->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jsonVersion}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

        <!-- Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jacksonVersion}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jacksonVersion}</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jacksonVersion}</version>
        </dependency>

        <!-- log4j配置, 视情况添加-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4jVersion}</version>
        </dependency>

        <!--文件 上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${fileuploadVersion}</version>
        </dependency>

        <!-- lombok插件导包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombokVersion}</version>
            <scope>provided</scope>
        </dependency>
        <!-- redis -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>1.3.1.RELEASE</version>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

</project>

demo下载路径:https://download.csdn.net/download/qingyou193301/10631715

猜你喜欢

转载自blog.csdn.net/qingyou193301/article/details/82149314