声明:这里是没用到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;
}
}
}
分享到:
相关推荐
7. **最佳实践**:在实现基于数据库的权限验证时,应遵循一些最佳实践,如分离用户数据和权限数据,使用预定义的角色而不是为每个用户分配单独的权限,以及定期审查和更新权限设置以适应业务变化。 综上所述,Seam...
Seam Security是针对Java Web应用程序的安全框架,它是JBoss Seam项目的一部分,提供了全面的安全解决方案,包括身份验证、授权和身份管理等功能。Seam Security以易于配置和使用为特点,允许开发者快速设置应用程序...
3. **权限验证**:Seam 包含一个广泛适用的权限验证框架,支持基于角色的访问控制(RBAC)、持久化权限设置以及规则驱动的权限决策。这使得开发者可以根据业务逻辑创建自定义的安全策略。 4. **权限管理**:Seam ...
5. **安全和身份验证(Security and Authentication)**: Seam集成了JAAS(Java Authentication and Authorization Service),提供了用户认证和权限管理功能。 **三、Seam与Java EE集成** 1. **JSF集成**: Seam与...
相较于 Seam 2.0 版本,Seam 2.1 在权限验证方面进行了大量的增强,引入了更多的功能和改进,以适应更加复杂的应用场景。 #### 二、Seam 2.1 的新增特性与改进 在 Seam 2.1 中,最显著的变化之一就是增强了安全性...
Seam提供了安全的身份验证和授权服务,可以与JSF组件配合使用,创建用户友好的表单和处理登录逻辑。Seam的Security模块允许开发者轻松管理用户角色和权限,确保只有授权用户能访问特定资源。 2. **猜数字游戏(jbpm...
6. **安全和身份验证**:Seam 提供了内置的安全性和身份验证机制,可以轻松地集成到应用中,保护敏感数据和操作。 7. **国际化和本地化**:Seam 支持多语言,方便开发多语言应用。 **Seam 2.0 的文档:** 提供的...
- **拦截器**:在 Seam 中,拦截器被用来增强组件的行为,如权限检查、日志记录等。 - **组件名字**:每个 Seam 组件都需要有一个唯一的名称,以便于引用和配置。 - **定义组件作用域**:通过配置文件或注解,可以...
7. **安全和身份验证**:Seam集成了JAAS(Java Authentication and Authorization Service),简化了权限管理和认证流程。 8. **富客户端支持**:通过与RichFaces的集成,Seam可以创建具有丰富用户体验的Web应用,...
1. **JBoss AS(JBoss Application Server)**:JBoss AS 是一个免费的开源 Java EE 容器,Seam 2.x 设计时即考虑了与 JBoss AS 的兼容性。 2. **部署过程**: - 准备好 JBoss AS 环境。 - 将 Seam 的库文件添加到...
- **安全性和权限管理**:提供了丰富的安全性和权限管理机制,确保应用的安全性。 - **数据验证和转换**:支持自动的数据验证和类型转换,减少了开发者的工作量。 #### 四、学习资源和社区支持 - **官方文档**:...
- **实现**:通过集成Spring Security等第三方库来实现权限验证和访问控制等功能。 - **优势**:易于集成和配置,能够快速为应用程序添加安全特性。 ##### Application Framework - **概述**:Seam框架不仅限于Web...
- 细粒度权限管理:实现对用户访问权限的精确控制。 - LDAP身份验证:支持LDAP目录服务的身份验证。 - 会话管理:确保用户会话的安全性。 #### 十、Web服务 Liferay提供了丰富的Web服务支持,包括: - JSON:一种轻...
- **集成能力**:支持与其他流行框架如 Hibernate、Spring、Seam 和 Acegi 等的集成。 #### 二、Apache Tapestry5 特点 在本节中,我们将详细介绍 Tapestry 5 的特点及其如何帮助开发者构建高质量的 Web 应用程序...
8. 测试和优化:在测试环境中验证广告的正确性和效果,根据数据反馈进行优化,确保广告的用户体验和效果达到预期。 通过米迪官方SDK及DEMO,开发者不仅可以快速接入广告系统,还可以参考DEMO中的示例代码,了解如何...