请问struts1.2+spring2.0+hibernate3.2谁有一个能跑的简单程序?
我已经建立了N+1次了, 每次都以失败结束,实在受不了了,请帮忙有的发个,再次谢谢 :oops:
请问struts1.2+spring2.0+hibernate3.2谁有一个能跑的简单程序?
我已经建立了N+1次了, 每次都以失败结束,实在受不了了,请帮忙有的发个,再次谢谢 :oops:
这个发个完整的确实很辛苦啊。我只能从我的Acegi练习中截取一部分(其实就是从AppFuse和SpringSide中抄来了的,综合了一下 :D ),楼主适当调整一下(其实,影响你成败的就是那几个配置文件,其它的按部就班,别犯低级错误就行):
[code="java"]
package com.zhaipuhong.portal.dao.hibernate;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.zhaipuhong.portal.dao.Dao;
public class BaseDaoHibernate extends HibernateDaoSupport implements Dao {
protected final Log log = LogFactory.getLog(getClass());
/**
* @see com.zhaipuhong.portal.dao.Dao#saveObject(java.lang.Object)
*/
public Object getObject(Class clazz, Serializable id) {
Object o = getHibernateTemplate().get(clazz, id);
if(o == null){
throw new ObjectRetrievalFailureException(clazz, id);
}
return o;
}
/**
* @see com.zhaipuhong.portal.dao.Dao#getObjects(java.lang.Class)
*/
public List getObjects(Class clazz) {
return getHibernateTemplate().loadAll(clazz);
}
/**
* @see com.zhaipuhong.portal.dao.Dao#getObject(java.lang.Class, java.io.Serializable)
*/
public void removeObject(Class clazz, Serializable id) {
getHibernateTemplate().delete(getObject(clazz, id));
}
/**
* @see com.zhaipuhong.portal.dao.Dao#saveObject(java.lang.Object)
*/
public void saveObject(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao.hibernate;
import java.util.List;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ObjectRetrievalFailureException;
import com.zhaipuhong.portal.dao.TUserDao;
import com.zhaipuhong.portal.model.TUser;
public class TUserDaoHibernate extends BaseDaoHibernate implements TUserDao, UserDetailsService {
/**
* @see com.zhaipuhong.portal.dao.TUserDao#getTUser(java.lang.Long)
*/
public TUser getTUser(Long userId) {
TUser user = (TUser)this.getHibernateTemplate().get(TUser.class, userId);
if(user == null){
log.warn("Sorroy, user '" + userId + "' not found ...");
throw new ObjectRetrievalFailureException(TUser.class, userId);
}
return user;
}
/**
* @see com.zhaipuhong.portal.dao.TUserDao#getTUsers(com.zhaipuhong.portal.model.TUser)
*/
public List getTUsers(TUser user) {
return getHibernateTemplate().find("from TUser u");
}
public void removeTUser(Long userId) {
// TODO Auto-generated method stub
}
public void saveTUser(TUser user) {
if(log.isDebugEnabled()){
log.debug("user's id = " + user.getId());
}
getHibernateTemplate().saveOrUpdate(user);
getHibernateTemplate().flush();
}
//下面这个方法是做Acegi练习时用的,楼主可以自己取舍
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
List users = getHibernateTemplate().find("from TUser where username=?", username);
if(users == null || users.isEmpty()){
throw new UsernameNotFoundException("user '" + username + "' not found...");
}else{
return (UserDetails)users.get(0);
}
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao.hibernate;
import java.io.Serializable;
import java.util.List;
import com.zhaipuhong.portal.dao.TRoleDao;
import com.zhaipuhong.portal.model.TRole;
public class TRoleDaoHibernate extends BaseDaoHibernate implements TRoleDao {
public TRole getTRoleByName(String rolename) {
// TODO Auto-generated method stub
return null;
}
public List getTRoles(TRole role) {
// TODO Auto-generated method stub
return null;
}
public void removeTRole(String rolename) {
// TODO Auto-generated method stub
}
public void saveTRole(TRole role) {
// TODO Auto-generated method stub
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao;
import java.io.Serializable;
import java.util.List;
public interface Dao {
/**
* get all objects of a particular type
* @param clazz the type of objects
* @return List of objects
*/
public List getObjects(Class clazz);
/**
* get an object based on class and id.
* @param clazz model class to lookup, please look out the model class
* @param id the identifier of the class
* @return
*/
public Object getObject(Class clazz, Serializable id);
/**
* save an object including that both update and insert
* @param o the object to save
*/
public void saveObject(Object o);
/**
* delete an object based on class and id
* @param clazz object class
* @param id object id
*/
public void removeObject(Class clazz, Serializable id);
}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao;
import java.util.List;
import com.zhaipuhong.portal.model.TUser;
public interface TUserDao extends Dao {
/**
* Get the user base on the userId
* @param userId the user's identify
* @return TUser a user object
*/
public TUser getTUser(Long userId);
/**
* Get a list of user base on the parameters pass in
* @param user the user type to look up
* @return List list of users
*/
public List getTUsers(TUser user );
/**
* Save the user's information
* @param user the user object to be saved
*/
public void saveTUser(TUser user);
/**
* Remove the user by user's identify
* @param userId the user's identify
*/
public void removeTUser(Long userId);
}
[/code]
[code="java"]
package com.zhaipuhong.portal.dao;
import java.util.List;
import com.zhaipuhong.portal.model.TRole;
public interface TRoleDao extends Dao {
/**
* Get role base on role name
* @param rolename the role name
* @return TRole rose object
*/
public TRole getTRoleByName(String rolename);
/**
* Get a list of roles base on the parameters role
* @param role the role type
* @return List a list of roles
*/
public List getTRoles(TRole role);
/**
* Save a role object
* @param role the role object to be saved
*/
public void saveTRole(TRole role);
/**
* Remove a role base on the role name
* @param rolename the rose's name
*/
public void removeTRole(String rolename);
}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import org.acegisecurity.GrantedAuthority;
import org.acegisecurity.userdetails.UserDetails;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class TUser extends BaseObject implements Serializable, UserDetails {
// Fields
private static final long serialVersionUID = -7825485833495586451L;
private Long id;
private String username;
private String password;
private String passwordHint;
private String name;
private String phoneNumber;
private String mobileNumber;
private Address address = new Address();;
private String email;
private boolean accountExpired;
private boolean accountLocked;
private boolean accountEnable;
private Integer version;
private String website;
private Set roles = new HashSet();
// Constructors
/** default constructor */
public TUser() {
}
/** minimal constructor */
public TUser(Long id) {
this.id = id;
}
/** full constructor */
public TUser(Long id, String username, String password, String name,
String phoneNumber, String mobileNumber, Address address,
String email, boolean accountExpired, boolean accountLocked,
boolean accountEnable, Integer version, String website, Set roles) {
this.id = id;
this.username = username;
this.password = password;
this.name = name;
this.phoneNumber = phoneNumber;
this.mobileNumber = mobileNumber;
this.address = address;
this.email = email;
this.accountExpired = accountExpired;
this.accountLocked = accountLocked;
this.accountEnable = accountEnable;
this.version = version;
this.website = website;
this.roles = roles;
}
// Property accessors
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPasswordHint() {
return passwordHint;
}
public void setPasswordHint(String passwordHint) {
this.passwordHint = passwordHint;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return this.phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getMobileNumber() {
return this.mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address address) {
this.address = address;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean getAccountExpired() {
return this.accountExpired;
}
public void setAccountExpired(boolean accountExpired) {
this.accountExpired = accountExpired;
}
public boolean getAccountLocked() {
return this.accountLocked;
}
public void setAccountLocked(boolean accountLocked) {
this.accountLocked = accountLocked;
}
public boolean getAccountEnable() {
return this.accountEnable;
}
public void setAccountEnable(boolean accountEnable) {
this.accountEnable = accountEnable;
}
public Integer getVersion() {
return this.version;
}
public void setVersion(Integer version) {
this.version = version;
}
public String getWebsite() {
return this.website;
}
public void setWebsite(String website) {
this.website = website;
}
public Set getRoles() {
return this.roles;
}
public void setRoles(Set roles) {
this.roles = roles;
}
/**
* @see org.acegisecurity.userdetails.UserDetails#getAuthorities()
*/
public GrantedAuthority[] getAuthorities() {
// TODO Auto-generated method stub
//new String[]{"ROLE_HEAD_OF_ENGINEERING"};
TRole r = new TRole();
r.setName("ROLE_HEAD_OF_ENGINEERING");
Set rs = new HashSet();
rs.add(r);
return (GrantedAuthority[]) rs.toArray(new GrantedAuthority[0]);
}
/**
* @see org.acegisecurity.userdetails.UserDetails#isAccountNonExpired()
*/
public boolean isAccountNonExpired() {
// TODO Auto-generated method stub
return !getAccountExpired();
}
/**
* @see org.acegisecurity.userdetails.UserDetails#isAccountNonLocked()
*/
public boolean isAccountNonLocked() {
// TODO Auto-generated method stub
return !getAccountLocked();
}
/**
* @see org.acegisecurity.userdetails.UserDetails#isCredentialsNonExpired()
*/
public boolean isCredentialsNonExpired() {
// TODO Auto-generated method stub
return true;
}
/**
* @see org.acegisecurity.userdetails.UserDetails#isEnabled()
*/
public boolean isEnabled() {
// TODO Auto-generated method stub
return getAccountEnable();
}
@Override
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof TUser)) return false;
final TUser user = (TUser)o;
if(username != null ? !username.equals(user.getUsername()) : user.getUsername() != null)
return false;
return true;
}
@Override
public int hashCode() {
return (username != null ? username.hashCode() : 0);
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
.append("id", this.id)
.append("username", this.username)
.append("accountEnable", this.accountEnable).toString();
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;
import java.io.Serializable;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
public class Address extends BaseObject implements Serializable{
private static final long serialVersionUID = -8184668368278258023L;
protected String country;
protected String province;
protected String city;
protected String address;
protected String postCode;
public Address() {
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
@Override
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof Address)) return false;
Address addr = (Address)o;
if(address != null ? !address.equals(addr.getAddress()) : addr.getAddress() != null)
return false;
if(country != null ? !country.equals(addr.getCountry()) : addr.getCountry() != null)
return false;
if(province != null ? !province.equals(addr.getProvince()) : addr.getProvince() != null)
return false;
if(city != null ? !city.equals(addr.getCity()) : addr.getCity() != null)
return false;
if(postCode != null ? !postCode.equals(addr.getPostCode()) : addr.getPostCode() != null)
return false;
return false;
}
@Override
public int hashCode() {
int result;
result = (address != null ? address.hashCode() : 0);
result = 29*result + (country != null ? country.hashCode() : 0);
result = 29*result + (province != null ? province.hashCode() : 0);
result = 29*result + (city != null ? city.hashCode() : 0);
result = 29*result + (postCode != null ? postCode.hashCode() : 0);
return result;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
.append("address", this.address)
.append("country", this.country)
.append("province", this.province)
.append("postCode", this.postCode).toString();
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import org.acegisecurity.GrantedAuthority;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
/**
public class TRole extends BaseObject implements Serializable, GrantedAuthority {
// Fields
private static final long serialVersionUID = -5930649302512433094L;
private Long id;
private String name;
private String descn;
private Set users = new HashSet();
private Set permissions = new HashSet();
// Constructors
/** default constructor */
public TRole() {
}
/** minimal constructor */
public TRole(Long id) {
this.id = id;
}
/** full constructor */
public TRole(Long id, String name, String descn, Set users, Set permissions) {
this.id = id;
this.name = name;
this.descn = descn;
this.users = users;
this.permissions = permissions;
}
// Property accessors
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getDescn() {
return this.descn;
}
public void setDescn(String descn) {
this.descn = descn;
}
public Set getUsers() {
return this.users;
}
public void setUsers(Set users) {
this.users = users;
}
public Set getPermissions() {
return this.permissions;
}
public void setPermissions(Set permissions) {
this.permissions = permissions;
}
public String getAuthority() {
return getName();
}
@Override
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof TRole)) return false;
final TRole role = (TRole)o;
if(name != null ? name.equals(role.getName()) : role.getName() != null)
return false;
return true;
}
@Override
public int hashCode() {
return (name != null ? name.hashCode() : 0);
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE)
.append("roleid", this.getId())
.append("name", this.getName()).toString();
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.model;
import java.io.Serializable;
public abstract class BaseObject implements Serializable {
public abstract String toString();
public abstract boolean equals(Object o);
public abstract int hashCode();
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service.impl;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.zhaipuhong.portal.dao.Dao;
import com.zhaipuhong.portal.service.Manager;
public class BaseManager implements Manager {
protected final Log log = LogFactory.getLog(getClass());
protected Dao dao = null;
/**
* @see com.zhaipuhong.portal.service.Manager#setDao(com.zhaipuhong.portal.dao.Dao)
*/
public void setDao(Dao dao) {
this.dao = dao;
}
/**
* @see com.zhaipuhong.portal.service.Manager#getObject(java.lang.Class, java.io.Serializable)
*/
public Object getObject(Class clazz, Serializable id) {
return dao.getObject(clazz, id);
}
/**
* @see com.zhaipuhong.portal.service.Manager#getObjects(java.lang.Class)
*/
public List getObjects(Class clazz) {
return dao.getObjects(clazz);
}
/**
* @see com.zhaipuhong.portal.service.Manager#removeObject(java.lang.Class, java.io.Serializable)
*/
public void removeObject(Class clazz, Serializable id) {
dao.removeObject(clazz, id);
}
/**
* @see com.zhaipuhong.portal.service.Manager#saveObject(java.lang.Object)
*/
public void saveObject(Object o) {
dao.saveObject(o);
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service.impl;
import java.util.List;
import org.springframework.dao.DataIntegrityViolationException;
import com.zhaipuhong.portal.dao.TUserDao;
import com.zhaipuhong.portal.model.TUser;
import com.zhaipuhong.portal.service.TUserManager;
public class TUserManagerImpl extends BaseManager implements TUserManager {
private TUserDao dao;
/**
* @see com.zhaipuhong.portal.service.TUserManager#setTuserDao(com.zhaipuhong.portal.dao.TUserDao)
*/
public void setTuserDao(TUserDao dao) {
this.dao = dao;
}
/**
* @see com.zhaipuhong.portal.service.TUserManager#getTUser(java.lang.String)
*/
public TUser getTUser(String userId) {
return dao.getTUser(new Long(userId));
}
/**
* @see com.zhaipuhong.portal.service.TUserManager#getTUsers(com.zhaipuhong.portal.model.TUser)
*/
public List getTUsers(TUser user) {
return dao.getTUsers(user);
}
/**
* @see com.zhaipuhong.portal.service.TUserManager#removeTUser(java.lang.String)
*/
public void removeTUser(String userId) {
dao.removeTUser(new Long(userId));
}
/**
* @throws Exception
* @see com.zhaipuhong.portal.service.TUserManager#saveTUser(com.zhaipuhong.portal.model.TUser)
*/
public void saveTUser(TUser user) throws Exception{
//if a new user, convert the username to lower case
if(user.getVersion() == null){
user.setUsername(user.getUsername().toLowerCase());
}
try{
dao.saveTUser(user);
}catch(DataIntegrityViolationException ex){
throw new Exception("User '" + user.getUsername() + "' already exists!");
}
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service.impl;
import java.util.List;
import com.zhaipuhong.portal.dao.TRoleDao;
import com.zhaipuhong.portal.model.TRole;
import com.zhaipuhong.portal.service.TRoleManager;
public class TRoleManagerImpl extends BaseManager implements TRoleManager {
private TRoleDao dao;
public void setTroleDao(TRoleDao dao) {
this.dao = dao;
}
/**
* @see com.zhaipuhong.portal.service.TRoleManager#getTRole(java.lang.String)
*/
public TRole getTRole(String rolename) {
return dao.getTRoleByName(rolename);
}
/**
* @see com.zhaipuhong.portal.service.TRoleManager#getTRoles(com.zhaipuhong.portal.model.TRole)
*/
public List getTRoles(TRole role) {
return dao.getTRoles(role);
}
/**
* @see com.zhaipuhong.portal.service.TRoleManager#removeTRole(java.lang.String)
*/
public void removeTRole(String rolename) {
dao.removeTRole(rolename);
}
/**
* @see com.zhaipuhong.portal.service.TRoleManager#saveTRole(com.zhaipuhong.portal.model.TRole)
*/
public void saveTRole(TRole role) {
dao.saveTRole(role);
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service;
import java.io.Serializable;
import java.util.List;
import com.zhaipuhong.portal.dao.Dao;
public interface Manager {
/**
* No special to say
* @param dao
*/
public void setDao(Dao dao);
/**
* get a all objects of a particular type
* @param clazz the type of objects
* @return List of objects
*/
public List getObjects(Class clazz);
/**
*
* @param clazz model class to look up
* @param id the identifier of the class
* @return an object
*/
public Object getObject(Class clazz, Serializable id);
/**
* save an object
* @param o the object to save
*/
public void saveObject(Object o);
/**
* delete an object based on class and id
* @param clazz model class to look up
* @param id the identifier of the class
*/
public void removeObject(Class clazz, Serializable id);
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service;
import java.util.List;
import com.zhaipuhong.portal.dao.TUserDao;
import com.zhaipuhong.portal.model.TUser;
public interface TUserManager {
/**
* Set the dao for communication with the data layer
* @param dao the user dao prompt
*/
public void setTuserDao(TUserDao dao);
/**
* Get the user's information base on the parameters pass in
* @param userId the user's identify
* @return TUser the user object
*/
public TUser getTUser(String userId);
/**
* Get a list of user base on the parameters pass in
* @param user a user object
* @return List a list of user
*/
public List getTUsers(TUser user);
/**
* Save a user
* @param user the user to be saved
* @throws Exception
*/
public void saveTUser(TUser user) throws Exception;
/**
* Remove a user by the user's id
* @param userId the user's id
*/
public void removeTUser(String userId);
}
[/code]
[code="java"]
package com.zhaipuhong.portal.service;
import java.util.List;
import com.zhaipuhong.portal.model.TRole;
public interface TRoleManager extends Manager {
/**
* Get the role's information base on the parameters pass in
* @param rolename the role's name
* @return TRole the role object
*/
public TRole getTRole(String rolename);
/**
* Get a list of role base on the parameters pass in
* @param role a role object
* @return List a list of role
*/
public List getTRoles(TRole role);
/**
* Save a role
* @param role the role to be saved
*/
public void saveTRole(TRole role);
/**
* Remove a rolename by the role's name
* @param rolename the role's name
*/
public void removeTRole(String rolename);
}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.action;
import java.util.Date;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.IntegerConverter;
import org.apache.commons.beanutils.converters.LongConverter;
import org.apache.struts.actions.DispatchAction;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class BaseAction extends DispatchAction {
private static Long defaultLong = null;
/*
* Register converter tools
*/
static {
ConvertUtils.register(new LongConverter(defaultLong), Long.class);
ConvertUtils.register(new IntegerConverter(defaultLong), Integer.class);
}
/**
* Get initialize bean in spring application context
* @param name the name of the bean
* @return Object the bean of request
*/
public Object getBean(String name) {
ApplicationContext ctx = WebApplicationContextUtils
.getRequiredWebApplicationContext(servlet.getServletContext());
return ctx.getBean(name);
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.action;
public final class TUserAction extends BaseAction {
}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;
import java.io.Serializable;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;
public class BaseForm extends ValidatorForm implements Serializable{
public boolean equals(Object o){
return false;
}
public int hashCode(){
return 0;
}
public String toString(){
return null;
}
@Override
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
// TODO Auto-generated method stub
//return super.validate(mapping, request);
return null;
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class TUserForm extends BaseForm implements Serializable {
protected String id;
protected String username;
protected String password;
protected String confirmPassword;
protected String passwordHint;
protected String name;
protected String version;
protected String website;
protected String email;
protected AddressForm address = new AddressForm();
protected Set roles = new HashSet();
protected boolean accountExpire;
protected boolean accountLocked;
protected boolean accountEnable;
public TUserForm() {
}
public String getId() {
return id;
}
public void setId(String 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 String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
public String getPasswordHint() {
return passwordHint;
}
public void setPasswordHint(String passwordHint) {
this.passwordHint = passwordHint;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public AddressForm getAddress() {
return address;
}
public void setAddress(AddressForm address) {
this.address = address;
}
public Set getRoles() {
return roles;
}
public void setRoles(Set roles) {
this.roles = roles;
}
public boolean isAccountExpire() {
return accountExpire;
}
public void setAccountExpire(boolean accountExpire) {
this.accountExpire = accountExpire;
}
public boolean isAccountLocked() {
return accountLocked;
}
public void setAccountLocked(boolean accountLocked) {
this.accountLocked = accountLocked;
}
public boolean isAccountEnable() {
return accountEnable;
}
public void setAccountEnable(boolean accountEnable) {
this.accountEnable = accountEnable;
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;
import java.io.Serializable;
public class AddressForm extends BaseForm implements Serializable {
protected String address;
protected String country;
protected String province;
protected String city;
protected String postCode;
public AddressForm() {
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
}
[/code]
[code="java"]
package com.zhaipuhong.portal.webapp.form;
import java.io.Serializable;
import javax.servlet.ServletRequest;
import org.apache.struts.action.ActionMapping;
public class TRoleForm extends BaseForm implements Serializable {
public TRoleForm() {
}
@Override
public void reset(ActionMapping mapping, ServletRequest request) {
// TODO Auto-generated method stub
//super.reset(mapping, request);
}
}
[/code]
本人认为下面的文件才是重要的,上面的东西其实都差不多。
web.xml,其中楼主可以考虑取舍。
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
Portal WebSite
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml</param-value>
</context-param>
<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>
<filter-name>acegiFilter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>acegiFilter</filter-name>
<url-pattern>/j_security_check</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>acegiFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/index.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
[/code]
struts-config.xml
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<global-forwards>
<forward name="logout" path="index.jsp"/>
</global-forwards>
<action-mappings>
<action path="/saveUser" type="com.zhaipuhong.portal.webapp.action.TUserAction" name="userForm" scope="request" validate="false">
<forward name="list" path="/WEB-INF/pages/usermgr/userList.jsp" redirect="false"/>
</action>
</action-mappings>
[/code]
applicationContext-resources.xml,配置数据源
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
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-2.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/portal"/>
<property name="username" value="portal"/>
<property name="password" value="123456"/>
<property name="maxActive" value="100"/>
<property name="maxIdle" value="30"/>
<property name="maxWait" value="1000"/>
<property name="defaultAutoCommit" value="true"/>
<property name="removeAbandoned" value="true"/>
<property name="removeAbandonedTimeout" value="60"/>
<property name="logAbandoned" value="true"/>
</bean>
[/code]
applicationContext-service.xml,配置业务层事务和逻辑
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<aop:config>
<aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<bean id="manager" class="com.zhaipuhong.portal.service.impl.BaseManager">
<property name="dao" ref="dao"/>
</bean>
<bean id="tUserManager" class="com.zhaipuhong.portal.service.impl.TUserManagerImpl">
<property name="tuserDao" ref="tuserDao"/>
</bean>
<bean id="tRoleManager" class="com.zhaipuhong.portal.service.impl.TRoleManagerImpl">
<property name="troleDao" ref="troleDao"/>
</bean>
[/code]
applicationContext-hibernate.xml,配置hibernate
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
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-2.0.xsd">
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>com/zhaipuhong/portal/model/TUser.hbm.xml</value>
<value>com/zhaipuhong/portal/model/TRole.hbm.xml</value> </list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.query.substitutions">true '1', false '0'</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<!-- Hibernate Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- Base Dao -->
<bean id="dao" class="com.zhaipuhong.portal.dao.hibernate.BaseDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- TUserDao's Hibernate Implementation -->
<bean id="tuserDao" class="com.zhaipuhong.portal.dao.hibernate.TUserDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- TRoleDao's Hibernate Implementation -->
<bean id="troleDao" class="com.zhaipuhong.portal.dao.hibernate.TRoleDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
[/code]
applicationContext-security.xml,以为是acegi练习,少不了有个配置文件了
[code="java"]
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- ========================= Filter Chain ============================ -->
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
</value>
</property>
</bean>
<!-- Access authentication object -->
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter" />
<!-- Clear after logout -->
<bean id="logoutFilter"
class="org.acegisecurity.ui.logout.LogoutFilter">
<constructor-arg value="/logoutSuccess.jsp" /> <!-- logout success to redirecte to -->
<constructor-arg>
<list>
<bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
</list>
</constructor-arg>
</bean>
<!-- Process authentication request -->
<bean id="authenticationProcessingFilter"
class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationFailureUrl" value="/login.jsp?login_error=1" /> <!-- login failure to redirected to -->
<property name="defaultTargetUrl" value="/protected/protected1.jsp" /> <!-- login success to redirecte to -->
<property name="filterProcessesUrl" value="/j_security_check" /> <!-- login request action -->
</bean>
<!-- Decorate HttpServletRequest which container request parameters,header,Date,cookies etc. -->
<bean id="securityContextHolderAwareRequestFilter"
class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter" />
<!-- Configure anonymous user and authentication -->
<bean id="anonymousProcessingFilter"
class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
<property name="key" value="anonymous" />
<property name="userAttribute" value="anonymous,ROLE_ANONYMOUS" />
</bean>
<!-- Configure the map relation of exception & URL -->
<bean id="exceptionTranslationFilter"
class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint">
<bean
class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
<property name="loginFormUrl" value="/login.jsp" />
</bean>
</property>
<property name="accessDeniedHandler">
<bean
class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
<property name="errorPage" value="/accessDenied.jsp" />
</bean>
</property>
</bean>
<!-- Configure the map relation of the URL & Role -->
<bean id="filterInvocationInterceptor"
class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="accessDecisionManager" />
<property name="objectDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/protected/**=ROLE_HEAD_OF_ENGINEERING
/**=IS_AUTHENTICATED_ANONYMOUSLY
</value>
</property>
</bean>
<!-- Authentication manager -->
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>
<!-- Access decision vote manager -->
<bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
<property name="allowIfAllAbstainDecisions"
value="false" />
<property name="decisionVoters">
<list>
<bean class="org.acegisecurity.vote.RoleVoter" />
<bean class="org.acegisecurity.vote.AuthenticatedVoter" />
</list>
</property>
</bean>
<!-- DAO authentication provider which get the user's information from database -->
<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<!--property name="userDetailsService" ref="userDetailsService" /-->
<property name="userDetailsService" ref="tuserDao" />
<!-- UserCache property will activate the cache, it is not
mandatory but increases performance by cacheing the user
details retrieved from user-base -->
<property name="userCache" ref="userCache"/>
</bean>
<!-- Access user's username and password -->
<bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userProperties">
<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="/WEB-INF/users.properties" />
</bean>
</property>
</bean>
<!-- Cache user's information -->
<bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
<property name="cache">
<bean
class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<bean
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
</property>
<property name="cacheName" value="userCache" />
</bean>
</property>
</bean>
<!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
<bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener" />
[/code]
web根目录下登陆的JSP(login.jsp)的form片段:
[code="java"]
……
……
[/code]
web根目录下的logoutSuccess.jsp,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
[code="java"]
Go to Homepage
Login to sample application
[/code]
根目录下的\protected\protected1.jsp页面,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
[code="java"]
View protected resource 2
Logout
[/code]
根目录下的\protected\protected2.jsp页面,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
[code="java"]
View protected resource 1
Logout
[/code]
楼主仔细看看配置文件啊,其它的都没什么的,配置文件的细微资源,如错误页面,跳转页面等根据自己的实际修改。主干不变就行了。
我就只能帮到这个地方了 :wink: