使用manven+hibernate+spring+shiro登录验证实现简单增删改查

                                                                                                                                

                                                                                        使用manven+hibernate+spring+shiro登录验证实现简单增删改查

 
开发环境:eclipse2016,mylsql5.0

1.我们使用的是manven,首先我们要在pom.xml中导入一切需要的jar包。
    <properties>
      <shiro.version>1.3.2</shiro.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    
    
       <!-- 引入Hibernate依赖 -->
    <dependency>
       <groupId>org.hibernate</groupId>
       <artifactId>hibernate-core</artifactId>
       <version>5.2.10.Final</version>
    </dependency>
    
    <!-- 引入Mysql依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.43</version>
    </dependency>
    
    <!-- 引入Spring依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    
    <!-- 引入c3p0数据库连接池 -->
    <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
    </dependency>
    
    <!-- 引入Hibernate整合Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    
    <!-- 引入spring-aspects:解析事务的表达式 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    
    <!-- 引入Struts2依赖 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.3.33</version>
    </dependency>
    
    <!-- struts2整合Spring的 插件包 -->
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-spring-plugin</artifactId>
        <version>2.5.12</version>
    </dependency>
    
    <!-- log4J -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
    
    
       
    <!-- 引入json依赖 -->
    <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>2.4</version>
        <classifier>jdk15</classifier>
    </dependency>
    
    <!-- 引入jstl表达式 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
    <!-- 引入shiro依赖  START-->
    <dependency>
          <groupId>org.apache.shiro</groupId>
          <artifactId>shiro-core</artifactId>
          <version>${shiro.version}</version>
    </dependency>
    
    <dependency>
          <groupId>org.apache.shiro</groupId>
          <artifactId>shiro-web</artifactId>
          <version>${shiro.version}</version>
    </dependency>
    
    <dependency>
          <groupId>org.apache.shiro</groupId>
          <artifactId>shiro-spring</artifactId>
          <version>${shiro.version}</version>
    </dependency>
    <!-- 引入shiro依赖  END-->
  </dependencies>


    
这是所有的jar包

2.配置数据库连接池,写一个文件 db.properties

 uname=root

  upass=123
   url=jdbc:mysql://localhost:3306/test
   driverclass=com.mysql.jdbc.Driver

   initPoolSize=2
   maxPoolSize=20



3.使用三层架构来实现增删改查。(Class文件)


    3.1.1: 实体类:person


package com.zking.entity;

public class Person {
    private int pid;
    private String pname;
    private int page;
    public Person() {
        super();
    }
    public Person(String pname, int page) {
        super();
        this.pname = pname;
        this.page = page;
    }
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
}

           3.1.2:实体类映射文件: Person.hbm.xml


       <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-8-28 18:34:37 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.zking.entity.Person" table="PERSON">
        <id name="pid" type="int">
            <column name="PID" />
            <generator class="native" />
        </id>
        <property name="pname" type="java.lang.String">
            <column name="PNAME" />
        </property>
        <property name="page" type="int">
            <column name="PAGE" />
        </property>
    </class>
</hibernate-mapping>

       3.2.1:biz类:PersonBiz.java

      //增加

      public void addPerson(Person person);
      //删除

      public void deletePerson(int pid);

//修改

     public void updatePerson(Person person);

//查询全部

     public List<Person> getPersons();

//根据id修改

     public Person getid(int pid);

//登录的shiro验证

     public String getPage(String pname);

  

         3.2.2:biz实现类:PersonBizImp.java


  package com.zking.biz;

import java.util.List;

import com.zking.dao.PersonDao;
import com.zking.entity.Person;

public class PersonBizImp implements PersonBiz{

    private PersonDao personDao;
    
    public PersonDao getPersonDao() {
        return personDao;
    }

    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }

    public void addPerson(Person person) {
        // TODO Auto-generated method stub
        personDao.addPerson(person);
    }

    public void deletePerson(int pid) {
        // TODO Auto-generated method stub
        personDao.deletePerson(pid);
    }

    

    public Person getid(int pid) {
        // TODO Auto-generated method stub
        return personDao.getid(pid);
    }

    public List<Person> getPersons() {
        // TODO Auto-generated method stub
        return personDao.getPersons();
    }

    public void updatePerson(Person person) {
        // TODO Auto-generated method stub
        personDao.updatePerson(person);
    }

    public String getPage(String pname) {
        // TODO Auto-generated method stub
        return personDao.getPage(pname);
    }

       3.3.1:dao包:(跟biz包一样)

package com.zking.dao;

import java.util.List;

import com.zking.entity.Person;

public interface PersonDao {
    public void addPerson(Person person);
    public void deletePerson(int pid);
    public void updatePerson(Person person);
    public List<Person> getPersons();
    public Person getid(int pid);
    public String getPage(String pname);
}

3.3.2:daoi实现包



package com.zking.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.zking.entity.Person;

public class PersonDaoImp implements PersonDao{

    private SessionFactory sessionFactory;
    
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Session getSession(){
        return sessionFactory.getCurrentSession();
    }
    
    
    public void addPerson(Person person) {
        getSession().save(person);
    }

    public void deletePerson(int pid) {
        getSession().delete(getSession().get(Person.class, pid));
    }

    public List<Person> getPersons() {
        return getSession().createQuery("from Person").list();
    }
    public void updatePerson(Person person) {
        // TODO Auto-generated method stub
        getSession().update(person);
    }
    public Person getid(int pid) {
        // TODO Auto-generated method stub
         return (Person) getSession().createQuery("from Person where pid=?").setInteger(0, pid).uniqueResult();
    }
    public String getPage(String pname) {
        // TODO Auto-generated method stub
        String page=getSession().createQuery("select page from Person where pname= :name").setString("name", pname).uniqueResult().toString();
        return page;
    }
  
}

}

//3.4 shiro登录验证  LoginRealm.java

package com.zking.shiro;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

import com.zking.biz.PersonBiz;
import com.zking.entity.Person;

public class LoginRealm extends AuthorizingRealm{

    private PersonBiz personBiz;
    
    public PersonBiz getPersonBiz() {
        return personBiz;
    }

    public void setPersonBiz(PersonBiz personBiz) {
        this.personBiz = personBiz;
    }

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        
        //TODO 链接数据库进行判断
        //获取用户信息
        String pname=(String) token.getPrincipal();
        
        System.out.println("认证,查询数据库"+pname);
        
        //模拟
        String page=personBiz.getPage(pname);
        
        SimpleAuthenticationInfo simpleAuthenticationInfo=new SimpleAuthenticationInfo(pname, page, this.getName());
        
        return simpleAuthenticationInfo;
    }

}
//3.5  action类: PersonAction.java
    package com.zking.action;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import java.io.PrintWriter;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.zking.biz.PersonBiz;
import com.zking.entity.Person;

import net.sf.json.JSONArray;

public class PersonAction extends ActionSupport{
    
    private Person person;
    private PersonBiz personBiz;
    public PersonBiz getPersonBiz() {
        return personBiz;
    }
    public void setPersonBiz(PersonBiz personBiz) {
        this.personBiz = personBiz;
    }
    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }

//增加

    public String add() throws Exception {
        
        personBiz.addPerson(person);
        
        return "success";
    }
    
    //查询
    public void getall() throws Exception {
        // TODO Auto-generated method stub
        List<Person> persons=personBiz.getPersons();
        JSONArray json=JSONArray.fromObject(persons);
        PrintWriter pw=ServletActionContext.getResponse().getWriter();
        pw.print(json);
    }
  //删除
    public void delete() throws Exception {
        // TODO Auto-generated method stub
        personBiz.deletePerson(this.person.getPid());
    }


//修改

    public void update() throws Exception {
        // TODO Auto-generated method stub
         personBiz.updatePerson(this.person);
    }



//根据id查内容

    public String getone() {
        Person person=personBiz.getid(this.person.getPid());
            ServletActionContext.getRequest().getSession().setAttribute("person", person);
            return "aa";
            
            
        }

//login

    public String login() throws Exception {
        
        //personBiz.addPerson(person);
        
                //获取Subject
                Subject subject=SecurityUtils.getSubject();
                
                UsernamePasswordToken token=new UsernamePasswordToken(person.getPname(), person.getPage()+"");
                try {
                    subject.login(token);
                } catch (Exception e) {
                    //e.printStackTrace();
                    
                    return "login";
                }
                
                return "bb";
    }
}

   4:  //spring配置

  4.1:公开配置  applicationContext-public.xml

   <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">


    <!-- 1.引入db.properties -->
    <context:property-placeholder location="classpath:db.properties"/>

    <!-- 2.配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${uname}"></property>
        <property name="password" value="${upass}"></property>
        <property name="jdbcUrl" value="${url}"></property>
        <property name="driverClass" value="${driverclass}"></property>
        
        <property name="initialPoolSize" value="${initPoolSize}"></property>
        <property name="maxPoolSize" value="${maxPoolSize}"></property>
    </bean>

    <!--3. 配置SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <!-- 3.1 :引入数据源 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 3.2:关联hibernate配置文件 -->
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
        <!-- 3.3:关联映射文件 -->
        <property name="mappingLocations" value="classpath:com/zking/entity/*.hbm.xml"></property>
    </bean>
    
    <!-- 配置事务 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>

    <!-- 配置事务的属性 -->
    <tx:advice id="myAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    
    
    <!-- 配置事务的切点 -->
    <aop:config>
        <aop:pointcut expression="execution(* com.zking.dao.*.*(..))" id="myCut"/>
        <aop:advisor advice-ref="myAdvice" pointcut-ref="myCut"/>
    </aop:config>
    
</beans>

 4.2: //shiro配置  applicationContext-shiro.xml


 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- 1.配置shiroFilter -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- 引入安全管理器 -->
        <property name="securityManager" ref="securitymanager"></property>
        
        <!-- 没有认证,默认的页面 -->
        <property name="loginUrl" value="/index.jsp"></property>
        
        <!-- 认证通过,成功页面 -->
        <property name="successUrl" value="/success.jsp"></property>
        
        <!-- 没有认证通过,显示的页面 -->
        <property name="unauthorizedUrl" value="/unauthorizedUrl.jsp"></property>
    
        <!-- 过滤 -->
        <property name="filterChainDefinitions">
            <value>
                /index.jsp* = anon
                
                /success.jsp* = authc
            </value>
        </property>
    
    
    </bean>
    
    
    
    <!-- 2.配置Securitymanager -->
    <bean id="securitymanager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!-- 引入自定义realm -->
        <property name="realm" ref="loginRealm"></property>
    </bean>
    <!-- 3.配置自定义realm -->
    <bean id="loginRealm" class="com.zking.shiro.LoginRealm">
        <property name="personBiz" ref="personBizImp"></property>
    </bean>
</beans>

4.3 dao配置   applicationContext-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!-- 配置PersonDaoImp -->
    <bean id="personDaoImp" class="com.zking.dao.PersonDaoImp">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>


</beans>


    4.4:配置biz

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="personBizImp" class="com.zking.biz.PersonBizImp">
        <property name="personDao" ref="personDaoImp"></property>
    </bean>

</beans>

4.5:配置action

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="personAction" class="com.zking.action.PersonAction" scope="prototype">
        <property name="personBiz" ref="personBizImp"></property>
    </bean>
</beans>

4.6  struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <package name="myPackage" extends="struts-default">
            <action name="personAction*" class="personAction" method="{1}">
                <result name="success">/success.jsp</result>
                <result name="aa" type="redirect">/update.jsp</result>
                <result name="bb">/index.jsp</result>
                <result name="login">/login.jsp</result>
                
            </action>
        </package>
    </struts>


5.页面jsp

5.1: index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
<!--引入easyui库 -->
<link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css">   
<link rel="stylesheet" type="text/css" href="easyui/themes/icon.css">   
<script type="text/javascript" src="easyui/jquery.min.js"></script>   
<script type="text/javascript" src="easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="easyui/locale/easyui-lang-zh_CN.js"></script>
    <script type="text/javascript">
    $(function(){
        $('#aa').datagrid({    
            url:'personActiongetall.action',    
            columns:[[    
                {field:'pid',title:'ID',width:100,checkbox:true},    
                {field:'pname',title:'名字',width:100},    
                {field:'page',title:'年龄',width:100,align:'right'}    
            ]],
          toolbar:[
                {text:"删除",handler: function(){
                    var checkedItems = $('#aa').datagrid('getSelected');
                    $('#aa').datagrid({
                        url:"personActiondelete.action?person.pid="+checkedItems.pid
                         });
                    
                    }},
                    {text:"修改",handler: function(){
                        var checkedItems = $('#aa').datagrid('getSelected');
                        window.location.href="personActiongetone.action?person.pid="+checkedItems.pid;
                        $("#aa").datagrid('reload');
                        }}
                ]
    });  
    
});

    </script>
  </head>
<body>
    <form action="personActionadd.action" method="post">
        <input type="text" name="person.pname"/><br/>
        <input type="text" name="person.page"/><br/>
        <input type="submit" value="添加"/><br/>
    </form>
    <table id="aa"></table>
</body>
</html>


5.2 login.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>Insert title here</title>
</head>
<body>
<form action="personActionlogin.action" method="post">
        <input type="text" name="person.pname"/><br/>
        <input type="text" name="person.page"/><br/>
        <input type="submit" value="登录"/><br/>
    </form>
</body>
</html>


5.3 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>Insert title here</title>
</head>
<body>
    成功了
</body>
</html>


5.4 update.jsp

<%@page import="com.zking.entity.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
HttpSession session2=request.getSession();
Person person=(Person)session2.getAttribute("person");
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="personActionupdate.action" method="post">
    <input type="text" name="person.pid" value="${person.pid }" style="display: none;"/>
大名:<input type="text" name="person.pname" value="${person.pname }">
芳龄:<input type="text" name="person.page" value="${person.page }">
  <input type="submit" value="提交">

</body>
</html>


--以上就是全部源码,记得导ezsyui文件夹。界面有点尴尬,基本增删改查都能实现。





 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值