设为首页 收藏本站
查看: 791|回复: 0

[经验分享] SpringMVC+Apache Shiro+JPA(hibernate)整合配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-2 12:19:55 | 显示全部楼层 |阅读模式
  序:
  关于标题:
  说是教学,实在愧不敢当,但苦与本人文笔有限,实在找不到更合理,谦逊的词语表达,只能先这样定义了。
  其实最真实的想法,只是希望这个关键词能让更多的人浏览到这篇文章,也算是对于自己写文章的一个肯定吧。^_^!
  关于内容:
    再写这系列文章之前,本人和许多人一样都是伸手党,并深深的了解咱伸手党且英文较差的朋友对于新知识的学习及获取中文资料少的痛苦。所以本着“取之于民,共享与民”的原则,记录下实际工作中对SpringMVC+Shiro整合应用的部分心得。本人技术水平有限,仅希望文章对他人有一定的参考价值,足矣。
  关于拍砖:
    请轻拍,很痛的。且最好附上您的高见。
  另:Shiro基础及原理,推荐学习http://kdboy.iteye.com/category/35212,同时感谢他的博客,在我学习Shiro的过程中,给予很大帮助!
  

  
  教学:
  一、SpringMVC+Apache Shiro+JPA(hibernate)整合配置
  (1)新建Web工程,且导入所需Jar包。(以下截图为真实项目中删减后保留,如有不需要的JAR包,请自行删除)
DSC0000.jpg
  (2)配置web.xml,applicationContext.xml, spring-mvc.xml, log4j.properties
  web.xml






contextConfigLocation
classpath:applicationContext.xml



org.springframework.web.context.ContextLoaderListener




hibernateFilter

org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter



hibernateFilter
/*



shiroFilter

org.springframework.web.filter.DelegatingFilterProxy


targetFilterLifecycle
true



shiroFilter
/*



webAppRootKey
spring_springmvc_jpa.root


log4jConfigLocation
classpath:log4j.properties



org.springframework.web.util.Log4jConfigListener




characterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter


encoding
UTF-8


forceEncoding
true



characterEncodingFilter
/*


HiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter



HiddenHttpMethodFilter
dispatcherServlet




org.springframework.web.util.IntrospectorCleanupListener





dispatcherServlet

org.springframework.web.servlet.DispatcherServlet


contextConfigLocation
classpath:spring-mvc.xml

1



dispatcherServlet
/



JSPConfiguration
*.jsp
true
utf-8
false



login.jsp


  applicationContext.xml


















































org.hibernate.dialect.MySQL5Dialect


com.mysql.jdbc.Driver

3
18
10
update
true
false
none



        
        




























/login = anon
/validateCode = anon
/** = authc




  spring-mvc.xml






















text/html;charset=UTF-8


















/system/error




  jdbc.properties



jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/shirodemo?useUnicode=true&characterEncoding=UTF-8

jdbc.username=root
jdbc.password=root
BoneCP.idleConnectionTestPeriod=60
BoneCP.idleMaxAge=60
BoneCP.maxConnectionsPerPartition=5
BoneCP.minConnectionsPerPartition=1
BoneCP.partitionCount=3
BoneCP.acquireIncrement=2  
BoneCP.statementsCacheSize=0
BoneCP.releaseHelperThreads=3
  log4j.properties



log4j.rootLogger=INFO,stdout,file
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss,SSS} [%c]-[%p] %m%n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${spring_springmvc_jpa.root}/shirodemo.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
log4j.logger.org.hibernate.tool.hbm2ddl=info
  (3)建立JavaBean,User.java,Role.java,Permisson.java
  User.java



package org.shiro.demo.entity;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.codehaus.jackson.annotate.JsonIgnore;
@Entity
@Table(name = "CMSUser")
public class User implements Serializable {
private static final long serialVersionUID = 7419229779731522702L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "userid")
private Long id;
@Column(length = 50, unique = true)
private String account;
@Column(length = 100)
@JsonIgnore    //springmvc生成json不包含此字段
private String password;
@Column(length = 50)
private String nickname;
@ManyToMany(cascade = {CascadeType.PERSIST })
@JsonIgnore
@JoinTable(name = "CMSUserRole", joinColumns = { @JoinColumn(name = "userid", referencedColumnName = "userid") },
inverseJoinColumns = { @JoinColumn(name = "roleid", referencedColumnName = "roleid") })
private Collection roles;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Collection getRoles() {
return roles;
}
public void setRoles(Collection roles) {
this.roles = roles;
}
/**
* 本函数输出将作为默认的输出.
*/
public String toString() {
return account;
}
}
  Role.java



package org.shiro.demo.entity;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name = "CMSRole")
public class Role implements Serializable{
private static final long serialVersionUID = 6177417450707400228L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="roleid")
private Long id;
@Column(length=50)
private String name;
@Column(length=50)
private String description;
@ManyToMany(mappedBy = "roles")
@Basic(fetch = FetchType.LAZY)
private Collection users;
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.MERGE}, fetch = FetchType.LAZY)
@JoinTable(name = "CMSRolePms",
joinColumns = { @JoinColumn(name = "roleid", updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "pmsid", updatable = false) })
private Collection pmss;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Collection getUsers() {
return users;
}
public void setUsers(Collection users) {
this.users = users;
}
public Collection getPmss() {
return pmss;
}
public void setPmss(Collection pmss) {
this.pmss = pmss;
}
}
  Permisson.java



package org.shiro.demo.entity;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="CMSPermission")
public class Permission implements Serializable{
private static final long serialVersionUID = -8792590494605747957L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="pmsid")
private Long id;
@Column(length=50)
private String name;
@Column(length=100)
private String description;
@Column(length=50)
private String permission;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parentid")
private Permission parent;
@OneToMany(mappedBy = "parent",fetch = FetchType.LAZY,cascade={CascadeType.ALL})
private Collection children;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "pmss")
private Collection roles;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
public Permission getParent() {
return parent;
}
public void setParent(Permission parent) {
this.parent = parent;
}
public Collection getChildren() {
return children;
}
public void setChildren(Collection children) {
this.children = children;
}
public Collection getRoles() {
return roles;
}
public void setRoles(Collection roles) {
this.roles = roles;
}
}
  至此,配置基本完成,请继续学习下一篇文章:
  SpringMVC+Apache Shiro+JPA(hibernate)案例教学(二)基于SpringMVC+Shiro的用户登录权限验证
  
  转载自:http://www.iyunv.com/xql4j/archive/2013/03/30/2990841.html
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93306-1-1.html 上篇帖子: Apache mahout 源码阅读笔记--协同过滤, PearsonCorrelationSimilarity 下篇帖子: apache中文
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表