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();
}
}
}
分享到:
相关推荐
spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...
<bean id="authorizingRealm" class="com.mjm.core.interceptor.ShiroRealm"> 2.Shiro Filter 设置拦截的内容和登录页面和成功、失败页面 3.配置securityManager <bean id="securityManager" class="org.apache....
01.权限管理概述.avi ...20.spring集成-shiro配置.avi 21.spring集成-登录操作.avi 22.spring集成-静态注解授权.avi 23.spring集成-静态注解授权_补充.avi 24.spring集成-权限-角色-用户关系分析.a
Apache Shiro与Spring Boot集成 GitHub: : 用法 首先安装到本地仓库。 双向v2.0下为2.0.0版本,主要将Spring Boot升级到2.0.4.RELEASE,Shiro升级到1.4.0 mvn clean install pom.xml < groupId>...
通过查看源码,Shiro的Spring Boot自动配置是至少一个通过策略,即有一个权限类通过就判定有权限并通过。 自动配置类: org.apache.shiro.spring.config.web.autoconfigure.ShiroWebAutoConfiguration @Bean @...
<bean id="myShiroRealm" class="com.z.shiro.realm.ShiroRealm"> <property name="cacheManager" ref="cacheManager" /> </bean> <!-- Shiro Filter --> <bean id="shiroFilter" class="org.apache...
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <!-- end --> --修改了过滤链 <!-- 过滤链定义 --> //简单的讲就是把需要特别处理的路径写到前面,越特殊写...
bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 02 03 <!-- override these for application-specific URLs if you like:--> 04 <!-- ...
但对于普通项目来说,Shiro 的设计理念因为追求灵活性,一些概念如 Realm,Subject 的抽象级别都比较高,显得比较复杂。如果没有对框架细节进行深入了解的话,很难理解其中的准确含义。要将其应用于实际项目,还需要...
springMVC+mybatis+shiro+redis 项目整合demo。
springboot集成jwt和shiro实现前后端分离权限demo2 添加realm中异常处理
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <!-- end --> --修改了过滤链 <!-- 过滤链定义 --> //简单的讲就是把需要特别处理的路径写到前面,越特殊写...
尚硅谷_Shiro_集成 Spring · 04.尚硅谷_Shiro_工作流程(1) · 05.尚硅谷_Shiro_DelegatingFilterProxy · 06. 尚硅谷_Shiro_权限 URL 配置细节 · 07. 尚硅谷_Shiro_认证思路分析 · 08.尚硅谷_Shiro_实现认证...
shiro标签,第六讲 自定义Realm(加入整合spring和MyBatis), 第七讲 加密(加密算法、加密过程、加密实现代码),第八讲 记住我,第九讲 缓存管理(代码实现),第十讲 会话管理(session的监听和检测、环境配置)...
使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加了admin的permission,所以...
1.环境搭建(主要是在springcloud基础上添加shiro包) 2.完成核心代码编写 2.0 shiro配置java类( 主要配置 内容 安全管理器 SecurityManager; 过滤器工厂 ShiroFilterFactoryBean(设置...
shiro 登录管理和权限管理:将用户在页面输入的账号密码通过控制器到自定义realm里进行登录认证,如果查不到或者密码错误则抛出异常,控制器抓取异常反馈到登录页面,信息正确则跳转到菜单页面,通过点击菜单跳转到...
Spring boot druid: log4j2 Shiro 需要引入的依赖 <groupId>org.apache.shiro ...创建ShiroRealm类并继承AuthorizingRealm,然后实现AuthorizationInfo权限管理,AuthenticationInfo登录管理 登录
今天小编就为大家分享一篇关于Spring配置shiro时自定义Realm中属性无法使用注解注入的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Apache Shiro和Spring-Security为权限授权层,redis进行缓存。 Geek-Framework主要定位于微应用的开发,已内置后台系统的基础功能,用户管理、角色管理、权限管理、会员管理、日志管理等;前台已经实现用户登录,...