浏览 2326 次
锁定老帖子 主题:bboss 安全认证过滤器功能介绍
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-11
最后修改:2012-03-14
在此发帖旨在和大家分享并记录bboss的点点滴滴、方方面面,谢谢大家的支持
bboss 安全认证过滤器功能介绍 bboss 3.6新增了安全认证过滤器抽象类org.frameworkset.web.interceptor.AuthenticateFilter 废除之前版本中的mvc安全认证拦截器org.frameworkset.web.interceptor.AuthenticateInterceptor AuthenticateFilter过滤器具备两个功能: 身份检测-保证合法用户访问页面 权限检测-保证合法用户在具备访问权限的情况下才能访问页面 AuthenticateFilter过滤器具有以下属性 preventDispatchLoop = false;//循环跳转检测开关,true启用,false禁用,默认为false http10Compatible = true; //whether to stay compatible with HTTP 1.0 clients,true标识兼容,false标识不兼容,默认为true redirecturl = "/login.jsp"; //指定检测失败重定向地址,默认为login.jsp,即安全认证检测失败跳转向指定的页面 /** * 认证和权限检测失败页面跳转方式,有以下三个值,默认为redirect * include * redirect * forward */ directtype = "redirect"; //明确指出需要检测的页面范围,多个用逗号分隔,可选,如果没有配置则扫描所有页面(忽略patternsExclude指定的相关页面) //可以是指定包含通配符*的页面地址,用来模糊匹配多个页面 patternsInclude //明确指出不需要检测的页面范围,多个用逗号分隔,可选,如果没有配置则扫描所有页面或者扫描patternsInclude指定的页面 //可以是指定包含通配符*的页面地址,用来模糊匹配多个页面 patternsExclude //明确指出需要做权限检测的页面范围,多个用逗号分隔,可选,如果没有配置则扫描所有页面(忽略permissionExclude指定的相关页面) //可以是指定包含通配符*的页面地址,用来模糊匹配多个页面 permissionInclude //明确指出不需要检测的页面范围,多个用逗号分隔,可选,如果没有配置则扫描所有页面或者扫描permissionInclude指定的页面 //可以是指定包含通配符*的页面地址,用来模糊匹配多个页面 permissionExclude //enablePermissionCheck属性可以屏蔽权限检测机制,true启用,false禁用,默认值为false enablePermissionCheck AuthenticateFilter提供了两个抽象方法: protected boolean check(HttpServletRequest request, HttpServletResponse response, HandlerMeta handlerMeta) 在应用系统中,您可以继承org.frameworkset.web.interceptor.AuthenticateFilter并实现抽象方法check,从而实现具体的安全认证检测类来进行用户是否登录检测,如果已经登录则返回true,没有登录则返回false。 protected abstract boolean checkPermission(HttpServletRequest request, HttpServletResponse response, HandlerMeta handlerMeta,String uri); 应用系统可以继承实现checkPermission方法来实现url权限检测功能,返回true表示有url访问权限,false表示无url访问权限,无权限时将跳转到authorfailedurl属性对应的提示页面,enablePermissionCheck属性可以屏蔽权限检测机制。 以下是一个具体实现示例: public class SYSAuthenticateFilter extends AuthenticateFilter { /** * 用户身份验证 */ protected boolean check(HttpServletRequest request, HttpServletResponse response, HandlerMeta handlerMeta) { AccessControl control = AccessControl.getInstance(); boolean result = control.checkAccess(request, response, false); if(result) { request.setAttribute(AccessControl.accesscontrol_request_attribute_key,control); } return result; } /** * url权限判断 */ @Override protected boolean checkPermission(HttpServletRequest request, HttpServletResponse response, HandlerMeta handlerMeta, String uri) { AccessControl control = AccessControl.getAccessControl(); return control.checkURLPermission(uri, "visible", "column"); } } 安全过滤器在web.xml中的配置方法如下: <filter> <filter-name>securityFilter</filter-name> <filter-class>com.frameworkset.platform.security.SYSAuthenticateFilter</filter-class> <init-param> <param-name>patternsExclude</param-name> <param-value> /sysmanager/logoutredirect.jsp, /login.jsp, /logout.jsp </param-value> </init-param> <init-param> <param-name>redirecturl</param-name> <param-value>/sysmanager/logoutredirect.jsp</param-value> </init-param> <!-- 安全认证过滤器AuthenticateFilter中包含checkPermission抽象方法,应用系统可以继承实现这个方法来实现url权限检测功能,返回true表示有url访问权限,false表示无url访问权限,无权限时将跳转到authorfailedurl属性对应的提示页面 enablePermissionCheck属性可以屏蔽权限检测机制 --> <init-param> <param-name>enablePermissionCheck</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>permissionExclude</param-name> <param-value> /login.jsp,/authorfailed.jsp </param-value> </init-param> <!-- <init-param> --> <!-- <param-name>permissionInclude</param-name> --> <!-- <param-value> --> <!-- /login.jsp --> <!-- </param-value> --> <!-- </init-param> --> <init-param> <param-name>authorfailedurl</param-name> <param-value>/authorfailed.jsp</param-value> </init-param> <init-param> <param-name>preventDispatchLoop</param-name> <param-value>false</param-value> </init-param> </filter> <filter-mapping> <filter-name>securityFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>securityFilter</filter-name> <url-pattern>*.page</url-pattern> </filter-mapping> <filter-mapping> <filter-name>securityFilter</filter-name> <url-pattern>*.frame</url-pattern> </filter-mapping> 当采用AuthenticateFilter过滤器后,原来在bboss-mvc.xml中的认证拦截器就可以去掉了,具体操作方法为, 定位到bboss-mvc.xml,注释或者去掉SYSAuthenticateInterceptor节点内容: <!-- 配置全局控制器方法拦截器 --> <property name="org.frameworkset.web.servlet.gloabel.HandlerInterceptors" > <list componentType="bean"> <!--<property class="com.frameworkset.platform.security.SYSAuthenticateInterceptor"> --> <!-- 配置认证检查拦截器拦截url模式规则 --> <!-- <property name="patternsInclude"> <list componentType="string"> <property value="/**/*.page"/> </list> </property>--> <!-- 配置认证检查拦截器不拦截url模式规则 --> <!--<property name="patternsExclude"> <list componentType="string"> <property value="/uddi/queryservice/main.page"/> <property value="/uddi/queryservice/verify.page"/> <property value="/uddi/queryservice/requesterVerify.page"/> <property value="/uddi/queryservice/detail.page"/> <property value="/uddi/servicemanage/basic.page"/> <property value="/uddi/servicemanage/servicedesc.page"/> <property value="/uddi/servicemanage/listmetadata.page"/> <property value="/uddi/queryservice/visitpermission.page"/> <property value="/uddi/queryservice/logout.page"/> </list> </property> <property name="redirecturl" value="/sysmanager/logoutredirect.jsp"/> </property>--> </list> </property> 目前3.6版本还没有发布到sourceforge中,但是大家可以从github下载最新的源码构建jar包来进行升级: github源码地址: https://github.com/bbossgroups/bbossgroups-3.5 mvc依赖的jar说明请参考文章中的mvc部分(bboss框架的包需要全部重新从相应的子工程中构建新的包来替换和升级): http://yin-bp.iteye.com/blog/1143994 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-13
补充了以下权限方面的内容,AuthenticateFilter过滤器具备两个功能:
身份检测-保证合法用户访问页面 权限检测-保证合法用户在具备访问权限的情况下才能访问页面 |
|
返回顶楼 | |