package com.miv.shiro.common;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import com.miv.core.constant.DatabaseConstants;
import com.miv.entity.Role;
import com.miv.entity.User;
import com.miv.shiro.login.service.LoginService;
import com.miv.shiro.role.service.RolesService;
/**
* shiro与工程接口类
*
* @author 赵治宇
* @version
*/
public class WebRealm extends AuthorizingRealm {
private LoginService loginService;
private RolesService rolesService;
public WebRealm() {
setName("WebRealm");
}
public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}
public void setRolesService(RolesService rolesService) {
this.rolesService = rolesService;
}
/**
* 授权方法
*
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) throws AuthorizationException {
String userName = (String) principals.fromRealm(getName()).iterator().next();
User user = new User();
user.setLoginName(userName);
try {
user = loginService.findUserByUsername(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
/*
* List<Roles> roleList = rolesService.getCurrentRoleList(user); if (user != null) {
*
* for (Roles role : roleList) { info.addRole(role.getRoleName()); } }
*/
Role role = rolesService.findRoleById(user);
if (role == null) {
throw new AuthorizationException();
}
info.addRole(role.getRoleCode());
return info;
}
/**
* 认证方法
*
* @return
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
MIVshiroToken token = (MIVshiroToken) authcToken;
User user = new User();
user.setLoginName(token.getUsername());
user.setPassword(String.valueOf(token.getPassword()));
Role role = new Role();
role.setId(token.getROLE_CODE() + 0L);
user.setRole(role);
try {
user = loginService.findUserByUsernameAndPassword(user);
} catch (Exception e) {
throw new AuthenticationException();
}
if (user != null) {
boolean flag = token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_AGENCY)
|| token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_CALL_CENTER)
|| token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_ADMIN)
|| token.getROLE_CODE().equals(DatabaseConstants.ROLE_CODE_USER);
if (user.getStatus() == DatabaseConstants.STATUS_2.intValue() && flag) {
throw new LockedAccountException();
} else {
return new SimpleAuthenticationInfo(user.getLoginName(), user.getPassword(), getName());
}
} else {
throw new UnknownAccountException();
}
}
}
分享到:
相关推荐
将Shiro集成到项目中,通常需要在配置文件(如`shiro.ini`或Java配置)中指定安全策略,包括 Realm(负责与应用程序数据源交互以获取用户信息和权限信息)的配置,以及其他的设置项。 8. **插件体系** Shiro的...
- SecurityManager(安全管理器):Shiro框架的核心,负责管理所有的Subject、Realm、缓存等。 - Subject(主体):代表当前“用户”,这个用户不一定是一个具体的人,也可以是第三方服务、守护进程账户、时间驱动的...
在IT行业中,Spring Cloud Shiro 是一个非常重要的组合,它结合了Spring Boot的便捷性和Shiro的安全管理框架,用于构建微服务环境中的权限控制。在这个项目中,我们看到"springcloud-shiro"是一个基于Spring Boot的...
- **shiro-spring.jar**:Spring框架的集成,便于在Spring应用中使用Shiro。 - **log4j.jar, slf4j.jar**:日志处理库,Shiro依赖这些库进行日志输出。 了解和使用这些jar包,开发者可以根据项目需求选择合适的模块...
本教程将深入探讨如何结合Spring框架与Apache Shiro库,构建一套强大的权限管理系统。Spring作为Java领域的主流框架,提供了丰富的功能和灵活的扩展性;而Shiro则是一个轻量级的安全框架,专注于身份验证、授权和...
- 自定义Realm: Realm是Shiro与应用数据源的接口,通常需要自定义 Realm 类,实现用户的认证和授权逻辑,连接到数据库或其他数据存储。 - 过滤器链:Shiro的Filter Chain定义了请求的处理流程,如登录、权限检查...
在`shiro.web`这个项目中,我们可以看到Web应用的相关配置,可能包括了Spring MVC的Controller、Service和DAO,以及与Shiro相关的配置文件,如`shiro.ini`或`shiro.xml`。 在配置文件中,我们需要将自定义的Realm...
Subject代表了系统中的用户,而Realm则是Shiro获取身份验证和授权信息的接口,通常需要对接数据库或其它数据源。通过自定义Realm,我们可以将用户的登录信息、角色和权限存储在数据库中。 在实现细粒度动态权限管理...
7. **集成**:Shiro 可以轻松地与Spring、Struts、JSF等其他框架集成,以提供全面的安全解决方案。 在 "shiro-root-1.3.2-source-release" 源码包中,你可以找到以下内容: - `src/main/java`: 源代码,包括各个...
- 使用Spring的Bean管理,我们可以把Shiro的相关组件(如 Realm、SecurityManager、Filter)配置为Spring Bean,方便管理和依赖注入。 - 在Spring配置文件中定义Shiro的过滤器链,如`FormAuthenticationFilter`、`...
Shiro 不像Spring Security那样复杂,它提供了一种直观、简单的API来处理常见的安全需求,如用户身份验证、授权、会话管理和加密。 2. **Shiro的核心组件** - **Authentication(认证)**:验证用户身份,确保登录...
在Java Web开发领域,Apache Shiro和Spring框架的结合使用已经成为一种常见的安全解决方案。本示例项目"shiro+Spring的Demo"旨在展示如何将这两个强大的工具集整合,以实现高效、灵活的身份认证和授权功能。项目基于...
在集成Spring时,Shiro 可以更好地融入到Spring的IoC和AOP体系中,实现更灵活的安全控制。 首先,我们来理解一下Shiro的核心概念: 1. 认证:验证用户身份,通常涉及用户名和密码的匹配。 2. 授权:确定用户是否有...
Apache Shiro 和 Spring 的整合是Java Web开发中常见的安全框架集成方式,这使得开发者能够利用Shiro的强大安全功能,同时享受Spring的灵活架构优势。在本文中,我们将深入探讨Shiro与Spring整合的关键知识点,包括...
在IT行业中,Spring MVC、Redis和Shiro是三个非常重要的技术组件,它们分别在Web开发、数据缓存和安全管理方面发挥着关键作用。本项目"spring mvc-redis-shiro"是一个整合了这三个技术的实例,旨在提供一个清晰易懂...
在实际应用中,Spring和Shiro的结合使用能提供强大的安全防护,例如,你可以用Shiro进行用户登录验证,而Spring Security负责更复杂的访问控制策略。同时,Spring的AOP可以用来进行全局的安全处理,如方法级别的权限...
Apache Shiro是一个强大的...总的来说,"ShiroSpring"项目展示了如何将Shiro的安全功能与Spring框架相结合,以创建一个安全、易于维护的企业级应用。通过理解上述知识点,开发者能够更好地理解和实现类似的集成方案。
《Spring Boot结合Shiro实现权限管理详解》 在现代企业级应用开发中,权限管理是一项不可或缺的功能,它确保了系统安全性和用户数据的隐私。Spring Boot作为Java领域的一款热门微服务框架,以其简洁的配置和快速...
spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...
3. 编写Shiro配置类:在Spring MVC应用中,创建一个配置类,通过@Bean注解声明Shiro的相关组件,如SecurityManager、Realm等。 4. 绑定Filter:在Spring MVC的web.xml或Spring Boot的配置中,设置Shiro Filter,并...