jhrjhr123 2008-09-02 02:07
浏览 157
已采纳

请问struts1.2+spring2.0+hibernate3.2谁有一个能跑的简单程序

请问struts1.2+spring2.0+hibernate3.2谁有一个能跑的简单程序?

我已经建立了N+1次了, 每次都以失败结束,实在受不了了,请帮忙有的发个,再次谢谢 :oops:

  • 写回答

1条回答 默认 最新

  • piccbj 2008-09-02 09:56
    关注

    这个发个完整的确实很辛苦啊。我只能从我的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;

    /**

    • TRole generated by MyEclipse - Hibernate Tools */

    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"]
    ……

    Username : alice
    Password : 123
    User Name Password

    ……
    [/code]

    web根目录下的logoutSuccess.jsp,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
    [code="java"]


    Acegi sample application: Logout successfully

    Logout successfully !



    Go to Homepage


    Login to sample application

    [/code]

    根目录下的\protected\protected1.jsp页面,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
    [code="java"]


    Acegi sample application: Protected 1

    PROTECTED RESOURCE 1 !



    View protected resource 2




    Logout

    [/code]

    根目录下的\protected\protected2.jsp页面,与acegi匹配的页面,因为在配置文件中配置了的,所以必须也贴出来
    [code="java"]


    Acegi sample application: Protected 2

    PROTECTED RESOURCE 2 !



    View protected resource 1




    Logout


    [/code]

    楼主仔细看看配置文件啊,其它的都没什么的,配置文件的细微资源,如错误页面,跳转页面等根据自己的实际修改。主干不变就行了。

    我就只能帮到这个地方了 :wink:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘