- 浏览: 623937 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
ShiroDbRealm.java 代码如下
applicationContext-shiro.xml配置
web.xml配置
在spring-mvc的配置文件中,添加
参考:http://ask.csdn.net/questions/201357
public class ShiroDbRealm extends AuthorizingRealm { @Resource private UserService userService; /** * 认证回调函数,登录时调用. */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authcToken; User currentUser = userService.findByUserName(token.getUsername()); if (currentUser != null) { if (currentUser.getStatus()==User.STATUS_DISABLED) { throw new DisabledAccountException("用户已注销"); }else if(currentUser.getStatus()==User.STATUS_NOT_ACTIVE){ throw new DisabledAccountException("用户未激活");//这里需要编写一个用户未激活异常 } return new SimpleAuthenticationInfo(currentUser.getUsername(),currentUser.getUserpwd(), ""); } return null; } /** * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用. */ @Override protected AuthorizationInfo doGetAuthorizationInfo( PrincipalCollection principals) { // Cache<Object, AuthenticationInfo> authenticationCache = // getAuthenticationCache(); String primaryPrincipal = (String) principals.getPrimaryPrincipal(); System.out.println("-----------*************************------------>"+ primaryPrincipal); List<String> roles = new ArrayList<String>(); List<String> permissions = new ArrayList<String>(); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); User user = userService.findByUserName(primaryPrincipal); if(user != null){ for (Role role : user.getRoles()) { roles.add(role.getName()); for (Permission p : role.getPermissions()) { permissions.add(p.getPrivilege()); } } }else{ throw new AuthorizationException(); } //给当前用户设置角色 info.addRoles(roles); //给当前用户设置权限 info.addStringPermissions(permissions); return info; } }
applicationContext-shiro.xml配置
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <description>Shiro安全配置</description> <!-- Shiro's main business-tier object for web-enabled applications --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="shiroDbRealm"/> <property name="cacheManager" ref="shiroEhcacheManager"/> </bean> <!-- 項目自定义的Realm --> <bean id="shiroDbRealm" class="com.wsq.app.service.common.ShiroDbRealm"> <!-- <property name="userService" ref="userService"/> 这里我在项目中只用了注解注入--> </bean> <!-- Shiro Filter --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!-- 这个属性是必须的 --> <property name="securityManager" ref="securityManager"/> <!-- 没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面 --> <property name="loginUrl" value="/login"/> <!-- 登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此 --> <property name="successUrl" value="/"/> <!-- 没有权限默认跳转的页面 --> <property name="unauthorizedUrl" value=""/> <!-- 就是需要验证的地址的列表,常用的包含anon、authc、perms、roles、user、logout。 --> <property name="filterChainDefinitions"> <value> /static/** = anon /login = anon /login/** = anon /logout = user /** = authc </value> </property> </bean> <!-- 用户授权信息Cache, 采用EhCache --> <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <property name="cacheManagerConfigFile" value="classpath:resource/ehcache-shiro.xml"/> </bean> <!-- 保证实现了Shiro内部lifecycle函数的bean执行 --> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <!-- AOP式方法级权限检查 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true"/> </bean> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean> </beans>
web.xml配置
<!-- Shiro Security filter --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
在spring-mvc的配置文件中,添加
引用
<aop:config proxy-target-class="true"></aop:config>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>
参考:http://ask.csdn.net/questions/201357
- spring-mvc.rar (1.4 KB)
- 下载次数: 3
发表评论
-
SpringMVC整合Shiro权限框架
2017-05-09 23:18 409http://blog.csdn.net/donggua369 ... -
第十九章 动态URL权限控制——《跟我学Shiro》
2017-03-06 22:22 462参考:http://jinnianshilongnian.it ... -
Shiro入门(1)
2017-03-04 23:31 308参考:http://blog.csdn.net/zhengwe ... -
使用Shiro重写Session
2016-08-13 12:06 671摘要 在使用SpringMVC的时候,我们习惯使用与容器(to ... -
Shiro 拦截器介绍
2016-08-08 10:20 474Shiro使用了与Servlet一样的Filter接口进行扩展 ... -
shiro安全框架扩展教程--异常退出没有清除缓存信息处理方案
2016-08-02 09:52 762自从之前研究了security3一段时间,发现也不咋滴,后来转 ... -
openAPI相关的表
2016-07-29 10:08 319OAuth2 自己的实现 -
Shiro源码分析-初始化-SecurityManager
2016-07-20 09:15 379http://www.tuicool.com/articles ... -
跟我学Shiro目录贴
2016-07-19 08:37 333http://jinnianshilongnian.iteye ...
相关推荐
6. **授权控制**:在Controller或Service层,可以使用Shiro的`Subject.hasRole`和`Subject.isPermitted`方法检查用户是否拥有某个角色或权限,根据结果决定是否允许执行相应操作。 7. **异常处理**:Shiro的认证和...
这个类会继承自`AuthorizingRealm`,并覆盖`doGetAuthenticationInfo`和`doGetAuthorizationInfo`方法,以获取用户的认证和授权信息。例如,你可以使用MyBatis查询数据库中的用户信息: ```java public class ...
2. **自定义 Realm 类**:继承自Shiro的AuthorizingRealm,重写doGetAuthenticationInfo()和doGetAuthorizationInfo()方法,从数据源中获取并处理认证和授权信息。 3. **登录控制器**:接收用户登录请求,创建...
Shiro 的授权(Authorization)主要负责确定用户是否有权限执行某个操作。这通过角色(Role)和权限(Permission)来实现。角色是权限的集合,而权限则定义了用户可以做什么。例如,一个“管理员”角色可能包含了...
- ** Realm**: Realm是Shiro与应用程序数据源的桥梁,负责获取用户凭证并验证,以及执行授权检查。 - ** SecurityManager**:它是Shiro的核心,管理所有的安全组件,并协调它们的工作。 ### 四、Shiro的会话管理 ...
使用 MyBatis 作为持久层,你需要创建一个 Realm 类,该类继承自 `AuthorizingRealm`,并覆盖其 `doGetAuthenticationInfo()` 和 `doGetAuthorizationInfo()` 方法,分别处理认证和授权逻辑。 Realm 通过 MyBatis ...
2. `doGetAuthorizationInfo`: 这个方法用于执行授权。Shiro在用户登录成功后,会调用此方法来获取用户的权限信息。你需要在这里实现从数据源加载用户角色和权限的逻辑。返回一个`AuthorizationInfo`对象,包含用户...
Shiro的授权机制通过`hasPermission`或者`isPermitted` API来检查用户是否有执行特定操作的权限。在Realm中,我们需要实现`doGetAuthorizationInfo()`方法,从数据源获取用户的权限信息。在Shiro_Demo中,我们可以...
2. **创建Realm**: Realm 实现需要覆盖`doGetAuthenticationInfo()`和`doGetAuthorizationInfo()`方法。前者用于获取用户凭据,后者用于获取用户的角色和权限。 3. **处理登录**:当用户尝试登录时,Shiro的`...
2. 创建 Realm:根据应用的数据源实现自定义 Realm 类,覆盖 doGetAuthenticationInfo 和 doGetAuthorizationInfo 方法,以获取用户认证和授权信息。 ```java public class MyRealm extends AuthorizingRealm { //...
- 创建自定义Realm:实现`AuthorizingRealm`接口,覆盖`doGetAuthenticationInfo`和`doGetAuthorizationInfo`方法,以提供用户认证和授权的具体逻辑。 - 配置过滤器:定义Shiro过滤器,并在Web配置中声明它们,例如`...
- **Authorization(授权)**:控制用户访问权限,确定用户能否执行特定的操作。 - **Session Management(会话管理)**:处理用户会话,如存储用户信息、会话超时等。 - **Cryptography(加密)**:提供安全的...
- 实现自定义Realm:继承`AuthorizingRealm`,并覆盖其`doGetAuthenticationInfo()`和`doGetAuthorizationInfo()`方法,以实现认证和授权逻辑。 5. **Struts2整合Shiro** - 配置Struts2拦截器:在struts.xml中...
7. **测试**:创建测试用例,模拟不同的用户登录并访问受保护的资源,确保Shiro能正确执行认证和授权。 在"shiro-Demo01"这个项目中,你可能还会看到以下文件和目录: - `WebRoot/WEB-INF/web.xml`:Web应用的配置...
2. 实现Realm:重写`doGetAuthenticationInfo`和`doGetAuthorizationInfo`方法,完成用户身份验证和权限授权。 3. 编写Filter配置:在`WebSecurityConfig`中配置ShiroFilterFactoryBean,设置过滤器链,例如登录、...
2. **授权(Authorization)**:也称为访问控制,决定用户是否有权限执行特定的操作或访问特定资源。 3. **会话管理(Session Management)**:跟踪用户状态,通常在Web应用中,会话是用于保存用户信息的关键。 4. *...
8. **测试与调试**:在项目运行后,尝试登录并访问受保护的资源,查看Shiro是否能正确执行认证和授权。通过日志输出或断点调试,找出可能出现的问题。 通过以上步骤,我们就完成了Shiro与Spring、SpringMVC的整合,...
例如,我们创建一个自定义的UserRealm,继承自AuthorizingRealm,并实现doGetAuthenticationInfo和doGetAuthorizationInfo方法,以处理身份验证和授权逻辑: ```xml <!-- 配置数据源 --> ``` 然后,配置...