- 浏览: 3420802 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://my.oschina.net/sheldon1/blog/603351
一,自定义realm,重写认证,授权,验证权限三个方法
二、授权filter
isAccessAllowed,拦截方法,返回true表示通过验证,返回false会执行onAccessDenied方法。
三、shiro部分配置
一,自定义realm,重写认证,授权,验证权限三个方法
public class UserRealm extends AuthorizingRealm { @Autowired private SysUserService userService; @Autowired private UserAuthService userAuthService; private Logger logger = LoggerFactory.getLogger(this.getClass()); /** * 授权 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { SysUser user = (SysUser) principals.getPrimaryPrincipal(); SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(userAuthService.findStringRoles(user.getId())); authorizationInfo.setStringPermissions(userAuthService.findStringPermissions(user.getId())); return authorizationInfo; } /** * 认证 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { logger.info("----------------认证----------------"); UsernamePasswordToken upToken = (UsernamePasswordToken) token; String username = upToken.getUsername().trim(); String password = ""; if (upToken.getPassword() != null) { password = new String(upToken.getPassword()); } SysUser user = userService.login(username, password); if (user != null) { SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password.toCharArray(), getName()); return info; } return null; } //重写权限判断方法,加入正则判断 @Override public boolean isPermitted(PrincipalCollection principals, String permission) { AuthorizationInfo info = getAuthorizationInfo(principals); Collection<String> permissions = info.getStringPermissions(); return permissions.contains(permission) || patternMatch(permissions, permission); } /** * 正则 * @param patternUrlList * @param requestUri * @return */ public boolean patternMatch(Collection<String> patternUrlList, String requestUri) { boolean flag = false; for (String patternUri : patternUrlList) { if (StringUtils.isNotEmpty(patternUri)) { Pattern pattern = Pattern.compile(patternUri); Matcher matcher = pattern.matcher(requestUri); if (matcher.matches()) { flag = true; break; } } } return flag; }
二、授权filter
isAccessAllowed,拦截方法,返回true表示通过验证,返回false会执行onAccessDenied方法。
public class LoginCheckPermissionFilter extends AuthorizationFilter { public Logger logger = LoggerFactory.getLogger(getClass()); @Override protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { HttpServletRequest httpServletRequest = (HttpServletRequest) request; String url = httpServletRequest.getRequestURI(); try { Subject user = SecurityUtils.getSubject(); return user.isPermitted(url); } catch (Exception e) { logger.error("check permission error", e); } return true; } @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException { Subject subject = getSubject(request, response); HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletResponse httpServletResponse = (HttpServletResponse) response; String method = httpServletRequest.getMethod(); if (subject.getPrincipal() == null) { saveRequestAndRedirectToLogin(request, response); } else { String unauthorizedUrl = getUnauthorizedUrl(); if (StringUtils.hasText(unauthorizedUrl)) { if (method.equals("POST")) { httpServletResponse.setHeader("Content-Type", "application/json;charset=UTF-8"); String result = JSON.toJSONString(new BaseResp("没有权限,请联系管理员!", BizConstants.FAIL)); httpServletResponse.getWriter().write(result); } else { WebUtils.issueRedirect(request, response, unauthorizedUrl); } } else { WebUtils.toHttp(response).sendError(HttpServletResponse.SC_UNAUTHORIZED); } } return false; } }
三、shiro部分配置
<property name="securityManager" ref="securityManager"/> <property name="loginUrl" value="/login"/> <!--<property name="successUrl" value="/loginOK" />--> <property name="unauthorizedUrl" value="/noPermission"/> <property name="filters"> <map> <entry key="perms" value-ref="loginCheckPermissionFilter"/> <entry key="user" value-ref="myUserFilter"/> </map> </property> <property name="filterChainDefinitions"> <value> /favicon.ico = anon /resources/** = anon /PoiTemplate/** = anon /login = anon /logout = user /** = user,perms </value> </property> </bean>
发表评论
-
分布式存储系统GlusterFS安装配置
2016-06-27 14:51 1030http://navyaijm.blog.51cto.com/ ... -
分布式查询 presto 入门安装使用
2016-06-24 15:44 2502http://my.oschina.net/chengxiao ... -
Spring Boot 属性配置
2016-06-24 11:04 1181Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2025Spring Boot 集成MyBatis http://bl ... -
Spring MVC防重复提交
2016-06-17 15:47 1643http://my.oschina.net/zyqjustin ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2282http://my.oschina.net/simpleton ... -
跟我学习dubbo
2016-06-17 15:20 1065跟我学习dubbo-目录 http://bluereader. ... -
JavaMelody监控web服务器
2016-06-17 14:20 1178JavaMelody监控web服务器 http://my.os ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12055使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1332http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1397http://blog.csdn.net/jackpk/art ... -
freemarker使用记录
2016-06-08 16:24 1309freeMarker语法 http://uule.iteye. ... -
freemarker判断是否为空
2016-06-08 16:03 2http://www.oschina.net/code/sni ... -
ehcache 分布式支持
2016-06-05 22:26 1098原文 http://my.oschina.net/glenxu ... -
Intellij IDEA插件开发入门
2016-05-26 11:42 2882原文: http://blog.csdn.net/dc_726 ... -
阿里巴巴Druid数据源的配置与使用
2016-05-24 17:42 1542http://my.oschina.net/wjme/blog ... -
mvc:view-controller
2016-05-18 10:26 1081http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4101参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2286http://www.oschina.net/p/uncode ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1620http://fangjialong.iteye.com/bl ...
相关推荐
3. **Shiro的集成**:研究如何在SpringBoot应用中配置Shiro,包括安全配置、 Realm(认证和授权信息提供者)的实现以及自定义注解的编写和使用。 4. **Shiro的权限控制**:掌握如何使用Shiro的注解进行权限判断,如@...
1. **配置Shiro**:在后端服务器上,我们需要配置Shiro的Web环境,包括 Realm(域)的实现,用于从数据库或其他数据源加载用户、角色和权限信息。同时,设置Filter Chain,使Shiro能够拦截请求并执行权限校验。 2. ...
- **权限拦截**:在Controller层,通过Shiro的注解`@RequiresPermissions`或`@RequiresRoles`来实现方法级别的权限拦截。 5. **源码分析** 提供的"springboot-shiro"源码可能包含了以上所有步骤的实现,包括配置...
"shiro登录拦截校验demo"是一个实际应用Shiro框架进行登录验证和权限拦截的示例项目。 在该demo中,我们可以学习到以下几个核心知识点: 1. **Shiro的基本概念**: - **身份验证(Authentication)**:确认用户...
在我们的demo中,我们需要创建一个自定义Realm来连接到数据源,并实现认证和授权逻辑。 3. **SecurityManager**:它是Shiro的顶级组件,管理Subject的所有行为。通常,我们配置SecurityManager以使用特定的Realm。 ...
通过分析和运行这个ShiroDemo,开发者可以了解如何配置Shiro、如何自定义Realm以连接数据库、如何定义和分配角色及权限,以及如何在实际应用中进行权限控制。这对于初学者来说是一个很好的学习资源,能够快速掌握...
- 自定义Realm实现,处理用户和权限数据的查询。 - 配置文件(如`shiro.ini`或Java配置类),定义认证和授权规则。 - 过滤器链的配置,保护Web应用的路由。 - 测试用例,展示如何进行登录、权限检查等操作。 通过这...
在本文中,我们将深入探讨 Shiro 的授权机制,以及如何在实际的企业项目中与之整合,实现自定义 Realm,缓存管理和验证码与“记住我”功能。 ### 一、Shiro 授权机制 Shiro 的授权(Authorization)主要负责确定...
首先,Shiro调用`getSupportedPermissions`来了解 Realm 支持哪些类型的权限。 - 接着,Shiro会调用`doGetAuthorizationInfo`方法,该方法应返回一个`AuthorizationInfo`对象,其中包含用户的角色和权限信息。 - ...
在这个Demo中,我们可能会看到一个自定义的Realm实现,这个自定义 Realm 将连接到数据库中的用户、角色和权限表,以便进行身份验证和授权。通常,用户表会包含用户名、密码等信息,角色表会存储角色ID和角色名,权限...
2. **创建 Realm**:实现自定义 Realm,连接到应用的数据源,处理认证和授权。 3. **配置 SecurityManager**:设置 Shiro 的核心组件,定义 Realm 和其他安全策略。 4. **使用 SecurityUtils**:调用 SecurityUtils ...
这包括哪些 URL 需要经过 Shiro 的拦截,以及不同 URL 的访问权限设置。 Shiro 的优点在于其简洁的 API 和较低的学习曲线,适合大多数中小型企业级应用。相比 Spring Security,Shiro 的配置更简单,但功能上可能稍...
5. **自定义Realm**:实现自己的Realm类,用于处理认证和授权逻辑。 6. **注册Realm并注入给SecurityManager**:在Spring配置文件中注册自定义的Realm,并将其注入到SecurityManager中。 7. **注解方式权限控制**...
- 自定义Realm,对接自己的用户数据库进行认证和授权。 - 实现自定义过滤器,定制权限拦截规则。 - 学习Shiro的Caching机制,提升性能。 通过这个Spring Boot Shiro Demo项目,你可以深入理解Shiro的工作原理,...
然而,对于已经熟悉Shiro的开发者,可能需要更深入的高级话题,如自定义Realm、缓存策略、分布式会话管理等。 总之,Spring Boot与Shiro的结合,为我们提供了一个便捷且强大的安全解决方案,使得在Java应用中实现...
当然,实际项目中可能还需要处理更多细节,例如拦截器的配置、自定义认证和授权逻辑、记住我功能的实现、Session的分布式管理等。通过不断的实践和学习,我们可以逐步掌握Shiro的高级特性和SSM框架的深度整合,从而...
这可以通过实现`PermissionResolver`接口,自定义解析权限字符串的方式,或者使用`PermissionCollection`动态添加或移除权限。 **八、会话管理** 除了权限和角色,Shiro还包括会话管理功能。可以设置会话超时、...
Guice 提供了 `Interceptor` 接口,可以创建自定义拦截器来处理 Shiro 的权限注解。通过这种方式,当一个方法带有 Shiro 的权限注解时,Guice 会在方法执行前进行拦截,执行相应的权限检查。 在整合 Shiro 和 Guice...
5. **安全拦截**:配置Shiro Filter Chain,定义哪些URL需要进行权限控制。 6. **启动与集成**:在Spring Boot的主类中,通过`@EnableShiroWeb`注解启用Shiro,或者自定义WebSecurityManager并注册为Bean。 接下来...
- Spring的AOP(面向切面编程)使得Shiro能方便地进行权限拦截,通过注解或配置文件定义权限规则。 - 使用`@Autowired`注解将Shiro的`SecurityManager`注入到Spring的Bean中,实现统一管理。 3. **Shiro的核心...