rop 入门(五)

本文详细介绍如何搭建ROP框架,并通过具体实例演示了如何配置Maven项目、引入依赖、设置Spring配置文件、配置web.xml等内容。此外,还提供了SampleSessionManager和SimpleAppSecretManager等关键组件的实现方式以及测试方法。
摘要由CSDN通过智能技术生成

前边几章已经对rop做了大概的讲解,本章节我们一起来搭建rop框架
1、首先我们创建一个maven web项目(这里就不详细介绍了)
2、在maven的配置文件pom.xml中引入rop 和 spring(rop依赖于spring)的相关依赖文件

    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.bookegou</groupId>
            <artifactId>rop</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-core</artifactId>
            <version>${unitils.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-testng</artifactId>
            <version>${unitils.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.unitils</groupId>
            <artifactId>unitils-spring</artifactId>
            <version>${unitils.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
            <scope>test</scope>
        </dependency>

3、修改spring的配置文件


    <description>Spring Configuration</description>
    <context:annotation-config />
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
    <!--扫描Spring Bean -->
    <context:component-scan base-package="com.lyl.api"/>

  <!-- 启动Rop框架 -->
    <rop:annotation-driven
        id="router"
        session-manager="sampleSessionManager"
        app-secret-manager="appSecretManager"
        service-timeout-seconds="50"
        upload-file-max-size="500"
        upload-file-types="png,gif,jpg"
        core-pool-size="200"
        max-pool-size="500"
        queue-capacity="50"
        keep-alive-seconds="300"
        sign-enable="true"/>

 <bean id="sampleSessionManager" class="com.lyl.api.component.SampleSessionManager" /> 

 <!-- rop 签名判断拦截器 -->
 <bean id="appSecretManager" class="com.lyl.api.component.SimpleAppSecretManager"/>

4、web.xml配置详情

   <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext*.xml</param-value>
    </context-param>

    <!--  
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>
    -->

    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEnCoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--  
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
    -->
    <!--Rop框架请求捕获-->
    <servlet>
        <servlet-name>rop</servlet-name>
        <servlet-class>
            com.rop.RopServlet
        </servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>rop</servlet-name>
        <url-pattern>/router</url-pattern>
    </servlet-mapping>

SampleSessionManager.java类

package com.lyl.api.component;

import com.rop.session.Session;
import com.rop.session.SessionManager;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SampleSessionManager implements SessionManager{

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    private final Map<String, Session> sessionCache = new ConcurrentHashMap<String, Session>(128, 0.75f, 32);

    public void addSession(String sessionId, Session session) {
        sessionCache.put(sessionId, session);
    }

    public Session getSession(String sessionId) {
        return sessionCache.get(sessionId);
    }

    public void removeSession(String sessionId) {
        sessionCache.remove(sessionId);
    }
}

SimpleAppSecretManager.java

package com.lyl.api.component; 

import com.rop.security.AppSecretManager;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class SimpleAppSecretManager implements AppSecretManager {

    private static Map<String, String> appKeySecretMap = new HashMap<String, String>();

    //TODO
    static {
        //自用   这些应该从数据库查询出来  这里先写死了     用来和测试(接口调用)的时候传递的秘钥进行比对
        appKeySecretMap.put("100001", "a4160d00-b083-40f9-a749-07aef8781d52");
        //第三方
        //appKeySecretMap.put("200001", "f7140046-c46f-443d-a151-00e3b8bb5924");
    }


    public String getSecret(String appKey) {
        System.out.println("use SimpleAppSecretManager!");
        return appKeySecretMap.get(appKey);
    }

    public boolean isValidAppKey(String appKey) {
        return getSecret(appKey) != null;
//      return true;
    }

}

服务方法

package com.lyl.api.component; 

import com.rop.security.AppSecretManager;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class SimpleAppSecretManager implements AppSecretManager {

    private static Map<String, String> appKeySecretMap = new HashMap<String, String>();

    //TODO
    static {
        //自用   这些应该从数据库查询出来  这里先写死了     用来和测试(接口调用)的时候传递的秘钥进行比对
        appKeySecretMap.put("100001", "a4160d00-b083-40f9-a749-07aef8781d52");
        //第三方
        //appKeySecretMap.put("200001", "f7140046-c46f-443d-a151-00e3b8bb5924");
    }


    public String getSecret(String appKey) {
        System.out.println("use SimpleAppSecretManager!");
        return appKeySecretMap.get(appKey);
    }

    public boolean isValidAppKey(String appKey) {
        return getSecret(appKey) != null;
//      return true;
    }

}

测试方法

package com.lyl.api.test;


import org.junit.Test;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import com.lyl.api.support.utils.CopUtils;
import com.rop.MessageFormat;
import com.rop.client.DefaultRopClient;

public class TestTravelNotesAction {

     public static final String SERVER_URL = "http://127.0.0.1:8080/test-rop/router";
     public static final String APP_KEY = "100001";
     public static final String APP_SECRET = "a4160d00-b083-40f9-a749-07aef8781d52";
     private DefaultRopClient ropClient = new DefaultRopClient(SERVER_URL, APP_KEY, APP_SECRET, MessageFormat.json);

     @Test
     public void test_view_Travel(){
         MultiValueMap<String, String> paramValues = new LinkedMultiValueMap<String, String>();
            //系统级参数
            paramValues.add("method", "view-travel");
            paramValues.add("appKey", APP_KEY);
            paramValues.add("appSecret", APP_SECRET);
            paramValues.add("v", "1.0");
            paramValues.add("format", "json");
            String sign = CopUtils.sign(paramValues.toSingleValueMap(), APP_SECRET);
            paramValues.add("sign", sign);
            //业务参数  不参与签名
            paramValues.add("travelPage", "3");

            String buildGetUrl = CopUtils.buildGetUrl(paramValues.toSingleValueMap(), SERVER_URL);
            String responseContent = new RestTemplate().getForObject(buildGetUrl, String.class, paramValues);
            System.out.println(responseContent);
     }

}

TravelRequest.java

package com.lyl.api.request;

import com.rop.AbstractRopRequest;
import com.rop.annotation.IgnoreSign;

public class TravelRequest extends AbstractRopRequest{

    //用来标注该参数不需要进行签名
    @IgnoreSign
    private String travelPage;


    public String getTravelPage() {
        return travelPage;
    }

    public void setTravelPage(String travelPage) {
        this.travelPage = travelPage;
    }

}

Response.java

package com.lyl.api.response;

import java.io.Serializable;

import com.rop.security.MainError;

public class Response implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Result result=new Result();
    private Object data;


    public Response() {
        super();
    }

    public Response(MainError mainError) {
        this.result.setResult("0");
        this.result.setMessage(mainError.getMessage());
        this.result.setErrorCode(mainError.getCode());
    }

    public Response(Result result, Object data) {
        super();
        this.result = result;
        this.data = data;
    }

    public Result getResult() {
        return result;
    }
    public void setResult(Result result) {
        this.result = result;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    /**
     * 对服务名进行标准化处理:如book.upload转换为book-upload,
     *
     * @param method
     * @return
     */
    protected String transform(String method) {
        if(method != null){
            method = method.replace(".", "-");
            return method;
        }else{
            return "LACK_METHOD";
        }
    }

    public class Result implements Serializable{

        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String result = "0";
        private String message;
        //默认值
        private String errorCode="999";

        public String getResult() {
            return result;
        }
        public void setResult(String result) {
            this.result = result;
        }
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        public String getErrorCode() {
            return errorCode;
        }
        public void setErrorCode(String errorCode) {
            this.errorCode = errorCode;
        }


    }
}

demo源码下载地址:
这里写链接内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值