加密网址(仅限参数)

时间:2016-08-18 07:31:59

标签: codeigniter encryption

在我最近获得的一个项目中,所有的网址都是

www.abc.com/controller/action/1222

我想加密url参数只是为了实现像

这样的东西

www.abc.com/controller/action/saddsadad232dsdfo99jjdf

我知道我可以通过逐个更改所有网址并发送加密参数并在项目中的所有位置处理它们来实现。

所以我的问题是,有没有办法可以一次加密所有网址,而无需逐个更改每个链接?

只需要一个方向。我想我已经把所有细节都需要了。

谢谢!

2 个答案:

答案 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; }