在我最近获得的一个项目中,所有的网址都是
www.abc.com/controller/action/1222
我想加密url参数只是为了实现像
这样的东西www.abc.com/controller/action/saddsadad232dsdfo99jjdf
我知道我可以通过逐个更改所有网址并发送加密参数并在项目中的所有位置处理它们来实现。
所以我的问题是,有没有办法可以一次加密所有网址,而无需逐个更改每个链接?
只需要一个方向。我想我已经把所有细节都需要了。
谢谢!
答案 0 :(得分:1)
如果您使用site_url
帮助程序功能,并且您确定所有网址都符合此格式www.abc.com/controller/action/1222
,则可以使用此解决方案:
您只需覆盖site_url
类
CI_Config
方法即可
class MY_Config extends CI_Config
{
public function site_url($uri = '', $protocol = NULL)
{
$urlPath = ltrim(parse_url($this->_uri_string($uri), PHP_URL_PATH), '/');
$segments = explode('/', $urlPath);
$numOfSegments = count($segments);
$result = [$segments[0], $segments[1]]; // controller and action
// start from the third segment
for($i = 2; $i < $numOfSegments; $i++)
{
// replace md5 with your encoding function
$result[] = md5($segments[$i]);
}
return parent::site_url($result, $protocol);
}
}
示例:
echo site_url('controller/action/1222');
将输出www.abc.com/controller/action/3a029f04d76d32e79367c4b3255dda4d
答案 1 :(得分:0)
我使用Hashids helper。我认为这会做你以后的事。
您可以将参数传递给您的函数,如下所示:
<bean id="iterationDecider" class="com.xyz.StepFlowController" />
然后您可以在函数中对其进行解密,然后根据需要使用它:
public class StepFlowController implements JobExecutionDecider{
@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
FlowExecutionStatus status = null;
try {
if (conditionIsTrue) {
status = new FlowExecutionStatus("CONTINUABLE");
}else {
status = new FlowExecutionStatus("FINISHED");
}
} catch (Exception e) {
e.printStackTrace();
}
return status;
}