# 安全访问控制

# 基于DigestURL摘要算法控制

# 使用示例

第一步:明确哪个后端MVC请求需要被Digest,比如下面这个方法:

public class CollaborationController extends BaseController {
    public ModelAndView statisticSearch(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
    	ModelAndView mav = new ModelAndView("apps/collaboration/colStatisticSearch");
		String userId = request.getParameter("user_id");
		// TODO
		}
}

第二步:通过插件化开发,在插件配置pluginCfg.xml同级目录新增一个pluginProperties.xml文件,目录格式如下:

WEB-INF
	cfgHome
		plugin
			collaboration
				pluginCfg.xml
				pluginProperties.xml

第三步:pluginProperties.xml中定义的内容如下

按照注释的描述可以大概理解到collaboration.do的statisticSearch方法中的user_id参数需要被digest,用于权限校验。

<?xml version="1.0" encoding="utf-8"?>
<ctpConfig>
	<collaboration>
		<security>
            <!-- 需要做URL digest的URL注册,空格分隔1为uri地址,2为method(没有可以省略),3为digest参数名 -->
			<digesturl>/collaboration/collaboration.do statisticSearch user_id</digesturl>
        </security>
	</collaboration>
</ctpConfig>

第四步(最关键步骤):所有调用collaboration.do?method=statisticSearch的地方都要在这个URl中包装一个v参数,示例代码如下:

String url = "/collaboration/collaboration.do?method=statisticSearch&user_id=" + userId + "&v=" + SecurityHelper.func_digest(userId);

# 实现原理

参考代码SpringControllerAuthenticator.checkDigestParam

创建人:het