- 浏览: 222959 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (213)
- SQLServer (8)
- flex (8)
- 文章 (5)
- java (91)
- 数据结构 (0)
- 设计模式 (0)
- C# (2)
- Oracle (4)
- 技术 (4)
- 云计算 (0)
- 算法 (0)
- 记录 (3)
- javascript (5)
- div/css (1)
- http (0)
- IE (1)
- web (1)
- hadoop (0)
- extjs (4)
- hibernate (6)
- 错误记录 (5)
- mysql (4)
- json (1)
- jvm (1)
- spring (4)
- 工具 (2)
- tomcat (3)
- cxf (3)
- spring data (1)
- memcached (5)
- android-exception (2)
- 数据压缩 (1)
- 博客 (2)
- bat (0)
- nginx (3)
- svn (2)
- jpa (1)
- windows (2)
- h2 (2)
- webservice (2)
- android (5)
- oa (0)
- eclipse (2)
- jquery (2)
- jni (4)
- weblogic (1)
- work (0)
- smartclient (1)
- sql (0)
- excel (0)
- test (0)
- t (0)
- js (4)
- utils (0)
- bootstrap (0)
- sniper (0)
- ztree (0)
- google (0)
- mdb (0)
- redis (1)
- 思想 (1)
- css (0)
- appCan (0)
- activiti (0)
- 工作 (0)
- 浏览器 (1)
1、apache shiro与spring集成
(1)、 需要导入shiro-all.jar包;在web.xml中添加shiro过滤器:
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2)、在spring配置文件中注入shiro相关类库:
<!--自定义myRealm 继承自AuthorizingRealm 登录时与数据交互 -->
<bean id="myRealm" class="com.easyoa.shiro.MyRealm" ></bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login.jsp" />
<property name="successUrl" value="/index.jsp" />
<property name="unauthorizedUrl" value="/login.jsp" />
<property name="filterChainDefinitions">
<value>
/index.jsp = anon
/login.jsp = authc
/course/** = authc, roles[admin]
</value>
</property>
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--设置自定义realm-->
<property name="realm" ref="myRealm" />
</bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
<bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
(3)、登录系统时将页面传入的用户名和密码封装到token中:
Subject currentUser= SecurityUtil.getSubject();获取当前活动用户信息;
if(!currentUser.isAuthenticated()){
当前活动用户没有认证时,执行认证操作;首先将前台页面传入的username、password封装到token中;绝大部分使用UsernamePasswordToken;
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
如果有记住我的功能,则从页面获取rememberMe,如果选择记住我则为true,否则为false;
token.setRememberMe(true/false);
currentUser.login(token); 调用login方法将token传入shiro管理库中进行认证、授权等操作;
}
(4)、自定义realm类,该类需要继承AuthorizingRealm,并重写认证、授权方法:
@Service
public class MyRealm extends AuthorizingRealm{
public MyRealm() {
super();
//设置认证token的实现类,该处使用UsernamepasswordTken,也可自定义token,如果自定义token则需继承AuthenticationToken;
setAuthenticationTokenClass(UsernamePasswordToken.class);
//设置加密算法
/**
* 前台传入的明文与数据库中的加密数据进行比较,
* new Digest()为自定义加密类,集成simpleCredentialsMatcher类,并重写doCredentialsMatch方法
*/
setCredentialsMatcher(new Digest());
}
//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String loginName = (String) principalCollection.fromRealm(getName()).iterator().next();
Users user = usersService.getUserByName(loginName);//从数据库获取用户信息
if (null == user) {
return null;
} else {
SimpleAuthorizationInfo result = new SimpleAuthorizationInfo();
result封装用户权限,
result.addRole(roleName); 封装角色名
result.addStringPermission(permissionName); 封装权限字符串
result.addObjectPermission(Permission); 封装shiro的权限对象
return result;
}
}
/** * 更新用户授权信息缓存. */
public void clearCachedAuthorizationInfo(String principal) {
SimplePrincipalCollection principals = new SimplePrincipalCollection(
principal, getName());
clearCachedAuthorizationInfo(principals);
}
//认证
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
从数据库中获取用户信息
Users user = usersService.getUserByName(upToken.getUsername());
if (user != null) {
将从数据库中查询的用户名和密码封装到authenticationInfo对象中;shiro自动根据加密规则将前台的密码加密与之对比;
return new SimpleAuthenticationInfo(user.getUsername(), user.getPwdhash(), getName());
}
return null;
}
}
(5)、自定义加密类需要继承SimpleCredentialsMather,并重写doCredentialsMatch方法;
@Override
public boolean doCredentialsMatch(AuthenticationToken token,
AuthenticationInfo info) {
//对前台传入的明文数据加密,根据自定义加密规则加密,
Object tokencredential = this.digestObject(toBytes(token.getCredentials()), "SHA");
//从数据库获取的加密数据
Object accunt=this.getCredentials(info);
//返回对比结果
return equals(accunt,tokencredential);
}
(1)、 需要导入shiro-all.jar包;在web.xml中添加shiro过滤器:
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2)、在spring配置文件中注入shiro相关类库:
<!--自定义myRealm 继承自AuthorizingRealm 登录时与数据交互 -->
<bean id="myRealm" class="com.easyoa.shiro.MyRealm" ></bean>
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login.jsp" />
<property name="successUrl" value="/index.jsp" />
<property name="unauthorizedUrl" value="/login.jsp" />
<property name="filterChainDefinitions">
<value>
/index.jsp = anon
/login.jsp = authc
/course/** = authc, roles[admin]
</value>
</property>
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--设置自定义realm-->
<property name="realm" ref="myRealm" />
</bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
<bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
(3)、登录系统时将页面传入的用户名和密码封装到token中:
Subject currentUser= SecurityUtil.getSubject();获取当前活动用户信息;
if(!currentUser.isAuthenticated()){
当前活动用户没有认证时,执行认证操作;首先将前台页面传入的username、password封装到token中;绝大部分使用UsernamePasswordToken;
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
如果有记住我的功能,则从页面获取rememberMe,如果选择记住我则为true,否则为false;
token.setRememberMe(true/false);
currentUser.login(token); 调用login方法将token传入shiro管理库中进行认证、授权等操作;
}
(4)、自定义realm类,该类需要继承AuthorizingRealm,并重写认证、授权方法:
@Service
public class MyRealm extends AuthorizingRealm{
public MyRealm() {
super();
//设置认证token的实现类,该处使用UsernamepasswordTken,也可自定义token,如果自定义token则需继承AuthenticationToken;
setAuthenticationTokenClass(UsernamePasswordToken.class);
//设置加密算法
/**
* 前台传入的明文与数据库中的加密数据进行比较,
* new Digest()为自定义加密类,集成simpleCredentialsMatcher类,并重写doCredentialsMatch方法
*/
setCredentialsMatcher(new Digest());
}
//授权
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
String loginName = (String) principalCollection.fromRealm(getName()).iterator().next();
Users user = usersService.getUserByName(loginName);//从数据库获取用户信息
if (null == user) {
return null;
} else {
SimpleAuthorizationInfo result = new SimpleAuthorizationInfo();
result封装用户权限,
result.addRole(roleName); 封装角色名
result.addStringPermission(permissionName); 封装权限字符串
result.addObjectPermission(Permission); 封装shiro的权限对象
return result;
}
}
/** * 更新用户授权信息缓存. */
public void clearCachedAuthorizationInfo(String principal) {
SimplePrincipalCollection principals = new SimplePrincipalCollection(
principal, getName());
clearCachedAuthorizationInfo(principals);
}
//认证
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
从数据库中获取用户信息
Users user = usersService.getUserByName(upToken.getUsername());
if (user != null) {
将从数据库中查询的用户名和密码封装到authenticationInfo对象中;shiro自动根据加密规则将前台的密码加密与之对比;
return new SimpleAuthenticationInfo(user.getUsername(), user.getPwdhash(), getName());
}
return null;
}
}
(5)、自定义加密类需要继承SimpleCredentialsMather,并重写doCredentialsMatch方法;
@Override
public boolean doCredentialsMatch(AuthenticationToken token,
AuthenticationInfo info) {
//对前台传入的明文数据加密,根据自定义加密规则加密,
Object tokencredential = this.digestObject(toBytes(token.getCredentials()), "SHA");
//从数据库获取的加密数据
Object accunt=this.getCredentials(info);
//返回对比结果
return equals(accunt,tokencredential);
}
发表评论
-
adc-0205
2021-02-18 09:51 0data-handler-1.0-SNAPSHOT-B2-20 ... -
spring aop和ioc的区别
2017-06-21 15:25 0什么是DI机制? 依赖注入(Dependecy Inject ... -
SpringMVC的各种参数绑定方式
2017-06-16 09:39 0http://www.cnblogs.com/HD/p/410 ... -
spring mvc传递list参数
2017-06-15 23:41 1326http://www.cnblogs.com/liusongl ... -
eclipse字体问题
2017-06-09 12:26 539.metadata\.plugins\org.eclipse. ... -
泛型方法指定返回值类型
2017-04-01 17:11 1039public static <T> T getCa ... -
mysql数据库编码设置
2017-03-31 14:09 0SHOW VARIABLES LIKE 'char%' se ... -
java异常分类
2017-03-21 20:00 743http://www.blogjava.net/balajin ... -
Java工程师成神之路
2017-03-08 13:59 0http://www.importnew.com/17389. ... -
JEECG快速开发平台
2017-02-27 17:03 0http://demo.jeecg.org/loginCont ... -
Java性能调优笔记
2017-02-27 15:38 0http://www.cnblogs.com/likehua/ ... -
Windows环境Mycat数据库分库分表中间件部署
2017-02-27 14:23 0http://www.cnblogs.com/Wulex/p/ ... -
浅谈算法和数据结构(1):栈和队列
2017-02-27 14:21 0http://blog.jobbole.com/79267/ ... -
关系型数据的分布式处理系统MyCAT
2017-02-27 14:14 0http://www.blogjava.net/amigoxi ... -
关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
2017-02-27 14:05 0http://blog.csdn.net/allenlinru ... -
实战 Lucene,第 1 部分: 初识 Lucene
2017-02-27 14:02 0https://www.ibm.com/developerwo ... -
内存调优
2017-02-27 09:20 379http://blog.csdn.net/gjanyanlig ... -
内存管理和垃圾回收
2017-02-27 09:14 613http://blog.csdn.net/gjanyanlig ... -
activiti学习 表相关
2017-02-22 10:53 0select * from EFLOW_WO_COMMON w ... -
jboss之启动加载过程详解(-)
2017-02-20 17:04 1017http://www.2cto.com/os/201404/2 ...
相关推荐
本项目基于"Spring Boot+Maven+Spring Data JPA+apache Shiro+Easyui",这些技术栈的选择旨在简化开发过程,提供强大的功能,并确保系统的安全性和用户体验。 1. **Spring Boot**: Spring Boot是Spring框架的简化版...
这是一个基于Spring Boot、Apache Shiro、Spring MVC、MyBatis、Quartz和Druid的数据源管理框架的示例项目,名为"renren-security"。这个DEMO提供了完整的权限管理和任务调度解决方案,下面是这些技术栈的核心知识点...
本案例聚焦于使用Apache Shiro、Spring、Spring Data以及Redis来实现单点登录功能,下面将详细解释这些组件以及它们如何协同工作。 **Apache Shiro** Apache Shiro是一款轻量级的安全框架,提供了认证、授权、会话...
Apache Shiro 和 Spring MVC 是两个在 Java Web 开发中广泛使用的框架。Shiro 主要负责应用程序的安全管理,如身份认证、授权(权限控制)、会话管理和加密等,而 Spring MVC 则是 Spring 框架的一部分,用于构建 ...
在Java Web开发领域,Apache Shiro和Spring框架的结合使用已经成为一种常见的安全解决方案。本示例项目"shiro+Spring的Demo"旨在展示如何将这两个强大的工具集整合,以实现高效、灵活的身份认证和授权功能。项目基于...
由于项目需要从网上搜集的相关的集成框架,很多都是部分集成,一直没有找到整个流程全部集成好的,所以将集成好的框架分享出来供大家学习。 主要实现SSO、后台RBAC角色认证管理。 下载后需要自行修改配置,项目包内...
在IT安全领域,Apache Shiro和Spring Security是两个非常重要的框架,它们主要用于应用程序的安全管理,包括身份验证、授权、会话管理和加密等。本学习文档集合了这两个框架的相关知识,旨在帮助开发者深入理解和...
Apache Shiro 和 Spring 的集成是企业级 Java 应用中常见的安全框架组合,它们共同为应用程序提供用户认证、授权和会话管理等功能。Shiro 是一个轻量级的安全框架,而 Spring 则是一个全面的后端开发框架。下面将...
4. **Shiro**:Apache Shiro是一个强大且易用的Java安全框架,负责处理认证、授权、会话管理和加密等功能。在本项目中,Shiro被用来管理用户的登录、权限控制和会话。通过详细的Shiro配置,开发者可以自定义访问控制...
标题 "cas+shiro+spring实例" 涉及到的是一个集成CAS(Central Authentication Service)和Apache Shiro的Spring应用程序实例。这个实例是专为初学者设计的,旨在帮助他们理解和实现基于CAS的单点登录(Single Sign-...
标题 "Shiro+SpringMVC+Spring集成" 涉及的是在Web开发中整合Apache Shiro、Spring MVC和Spring框架的过程。这三个组件都是Java Web开发中的重要工具,Shiro负责安全认证和授权,Spring MVC处理MVC模式的实现,而...
首先,Shiro是Apache的一个开源安全框架,提供了认证、授权、加密和会话管理等功能,为Java应用提供了一站式的安全管理解决方案。在整合Shiro时,我们需要创建一个Shiro配置类,定义Realm(领域),该领域将与我们的...
Shiro通过简洁的API,使得在应用中集成安全功能变得简单易行。例如,可以使用Shiro的Subject接口来处理用户身份, Realm接口则用于连接数据源获取用户信息,以完成认证和授权过程。 再来看`JPA(Java Persistence ...
总的来说,Apache Shiro与Spring的集成可以让我们在Spring的环境中充分利用Shiro的安全功能,为应用程序提供全面的安全保障。通过理解和实践这些知识点,开发者可以构建更加安全可靠的Java应用。
Shiro是Apache的一个开源安全框架,它提供了一种简单的方式来管理应用的安全性,包括认证、授权和会话管理。在SSO场景下,Shiro可以作为服务端的认证代理,接收CAS提供的Ticket进行二次验证,并进行权限控制。 ...
- 配置Ehcache,定义缓存策略和生命周期,与Spring集成实现缓存管理。 - 配置Apache Shiro,创建安全配置,定义 Realm 进行身份验证和授权,设置过滤链以控制访问权限。 - 将Bootstrap样式和JavaScript库引入到项目...
4. **Shiro框架**:Apache Shiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能。在这个样本项目中,Shiro被用来实现权限控制,包括用户登录验证、角色与权限分配、访问控制等,确保只有...
在Spring Boot中集成Shiro,可以实现用户身份验证、权限控制以及会话管理,为Web应用程序提供安全防护。 3. **Swagger2**: Swagger2是一个用于设计、构建、文档化和使用RESTful Web服务的工具。它使用OpenAPI规范...
标题 "基于SpringBoot + Thymeleaf + Layui + Apache Shiro + Redis + .zip" 描述了一个使用现代Web开发技术构建的项目。这个项目利用了SpringBoot作为核心框架,Thymeleaf作为模板引擎,Layui作为前端UI框架,...