`

seam登录时的权限验证

阅读更多

    声明:这里是没用到seam的JPA的高级权限验证的。是普通的权限验证。高级的验证在我的博客里面也有说明!

普通验证:
    数据库表:一个users表、一个permission表,role表没有。
 但是users表中有role这个字段,也就是说一个user对应一个role。一个role可以对应多个user。
 一个user对应有多个permission。

高级的JPA的验证:
    数据库表:一个users表、一个role表、一个permission表。
其它的就不用多说了。
    

 

在登录验证的时候的代码:

package cn.ctit.cms.session;

import static org.jboss.seam.ScopeType.SESSION;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.drools.WorkingMemory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Observer;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.security.Credentials;
import org.jboss.seam.security.Identity;
import org.jboss.seam.security.permission.RuleBasedPermissionResolver;

import cn.ctit.cms.entity.Users;

@Stateless
@Name("authenticator")
public class AuthenticatorAction implements Authenticator 
{
    @In Identity identity;
    @In Credentials credentials;
    
    @In 
    RuleBasedPermissionResolver ruleBasedPermissionResolver;
    
    @PersistenceContext
    private EntityManager em;
    
    @Out(required=false, scope = SESSION)
    private Users user2;
   
    private short rolecount;
        
    @SuppressWarnings("unchecked")
    @Observer("org.jboss.seam.security.loginSuccessful")
     public void addrolepermission(){
    	    identity.addRole(String.valueOf(user2.getRole()));
    	    WorkingMemory wm = ruleBasedPermissionResolver.getSecurityContext();   
    	    for(Permission p:user2.getPermissionList()){ 
    		wm.insert(p);
    	    }	
      }
    
    
    @SuppressWarnings("unchecked")
    public boolean authenticate()
    {
    	try{
    		List results = em.createQuery("select u from Users u where u.username=:usern and u.password=:pass")
    						.setParameter("usern", credentials.getUsername())
    						.setParameter("pass", EncoderByMd5(credentials.getPassword()))
							.getResultList();
    		if(results.size() == 0){
        		FacesMessages.instance().addToControl("wrongmessage", "user name or password is not available !");
        		return false;
        	}else{
        		user2 = (Users) results.get(0);
        		if(user2.getEnable()!=null && user2.getEnable()){
        			return true;
        		}else{
        			FacesMessages.instance().addToControl("wrongmessage", "user is inactive !");
        			return false;
        		}
        	}
    	}catch (Exception ex){
    		ex.printStackTrace();
    		return false;
    	}
    	
    	
    }
        
}

 

 

分享到:
评论

相关推荐

    接上篇(seam登录时的权限验证)之“seam基于数据库的权限验证”

    7. **最佳实践**:在实现基于数据库的权限验证时,应遵循一些最佳实践,如分离用户数据和权限数据,使用预定义的角色而不是为每个用户分配单独的权限,以及定期审查和更新权限设置以适应业务变化。 综上所述,Seam...

    Seam 2.1 安全模块框架

    3. **权限验证**:Seam 包含一个广泛适用的权限验证框架,支持基于角色的访问控制(RBAC)、持久化权限设置以及规则驱动的权限决策。这使得开发者可以根据业务逻辑创建自定义的安全策略。 4. **权限管理**:Seam ...

    JBOSS SEAM组件中文手册

    5. **安全和身份验证(Security and Authentication)**: Seam集成了JAAS(Java Authentication and Authorization Service),提供了用户认证和权限管理功能。 **三、Seam与Java EE集成** 1. **JSF集成**: Seam与...

    seam2.1说明文档

    相较于 Seam 2.0 版本,Seam 2.1 在权限验证方面进行了大量的增强,引入了更多的功能和改进,以适应更加复杂的应用场景。 #### 二、Seam 2.1 的新增特性与改进 在 Seam 2.1 中,最显著的变化之一就是增强了安全性...

    自己做的seam例子

    Seam提供了安全的身份验证和授权服务,可以与JSF组件配合使用,创建用户友好的表单和处理登录逻辑。Seam的Security模块允许开发者轻松管理用户角色和权限,确保只有授权用户能访问特定资源。 2. **猜数字游戏(jbpm...

    seam2.0 中文文档

    6. **安全和身份验证**:Seam 提供了内置的安全性和身份验证机制,可以轻松地集成到应用中,保护敏感数据和操作。 7. **国际化和本地化**:Seam 支持多语言,方便开发多语言应用。 **Seam 2.0 的文档:** 提供的...

    jboss seam 中文文档

    - **拦截器**:在 Seam 中,拦截器被用来增强组件的行为,如权限检查、日志记录等。 - **组件名字**:每个 Seam 组件都需要有一个唯一的名称,以便于引用和配置。 - **定义组件作用域**:通过配置文件或注解,可以...

    seam in action

    7. **安全和身份验证**:Seam集成了JAAS(Java Authentication and Authorization Service),简化了权限管理和认证流程。 8. **富客户端支持**:通过与RichFaces的集成,Seam可以创建具有丰富用户体验的Web应用,...

    Packt.Publishing.Seam.2.x.Web.Development.Apr.2009

    1. **JBoss AS(JBoss Application Server)**:JBoss AS 是一个免费的开源 Java EE 容器,Seam 2.x 设计时即考虑了与 JBoss AS 的兼容性。 2. **部署过程**: - 准备好 JBoss AS 环境。 - 将 Seam 的库文件添加到...

    Apress.Beginning.JBoss.Seam.Feb.2007.pdf

    - **安全性和权限管理**:提供了丰富的安全性和权限管理机制,确保应用的安全性。 - **数据验证和转换**:支持自动的数据验证和类型转换,减少了开发者的工作量。 #### 四、学习资源和社区支持 - **官方文档**:...

    基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》摘要

    - **实现**:通过集成Spring Security等第三方库来实现权限验证和访问控制等功能。 - **优势**:易于集成和配置,能够快速为应用程序添加安全特性。 ##### Application Framework - **概述**:Seam框架不仅限于Web...

    liferayPortal

    - 细粒度权限管理:实现对用户访问权限的精确控制。 - LDAP身份验证:支持LDAP目录服务的身份验证。 - 会话管理:确保用户会话的安全性。 #### 十、Web服务 Liferay提供了丰富的Web服务支持,包括: - JSON:一种轻...

    Tapestry5 使用教程

    - **集成能力**:支持与其他流行框架如 Hibernate、Spring、Seam 和 Acegi 等的集成。 #### 二、Apache Tapestry5 特点 在本节中,我们将详细介绍 Tapestry 5 的特点及其如何帮助开发者构建高质量的 Web 应用程序...

    米迪官方SDK及DEMO

    8. 测试和优化:在测试环境中验证广告的正确性和效果,根据数据反馈进行优化,确保广告的用户体验和效果达到预期。 通过米迪官方SDK及DEMO,开发者不仅可以快速接入广告系统,还可以参考DEMO中的示例代码,了解如何...

Global site tag (gtag.js) - Google Analytics