使用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文件夹。界面有点尴尬,基本增删改查都能实现。