欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么在springBoot中利用CXF實現用戶名密碼校驗

今天就跟大家聊聊有關怎么在springBoot中利用CXF實現用戶名密碼校驗,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

目前成都創(chuàng)新互聯已為近1000家的企業(yè)提供了網站建設、域名、網站空間、綿陽服務器托管、企業(yè)網站設計、競秀網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發(fā)展。

準備工作:

創(chuàng)建springBoot項目webservice_server

創(chuàng)建springBoot項目webservice_client

分別添加CXF的依賴:

<!-- CXF webservice -->
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
  <version>3.1.11</version>
</dependency>
<!-- CXF webservice -->

一.定義要發(fā)布的接口和實現類

接口:

@WebService
public interface AppService {


  @WebMethod
  String getUserName(@WebParam(name = "id") String id) throws UnsupportedEncodingException;
  @WebMethod
  public User getUser(String id) throws UnsupportedEncodingException;
}

實現類:

//name暴露的服務名稱, targetNamespace:命名空間,設置為接口的包名倒寫(默認是本類包名倒寫). endpointInterface接口地址
@WebService(name = "test" ,targetNamespace ="http://cxf.wolfcode.cn/" ,endpointInterface = "cn.wolfcode.cxf.AppService")
public class AppServiceImpl implements AppService {
  JSONResult jsonResult = JSONResult.getJsonResult();
  @Override
  public String getUserName(String id) throws UnsupportedEncodingException {
    System.out.println("==========================="+id);
    JSONResult result= JSONResult.getJsonResult();
    result.setSuccess(true);
    result.setMessage("明哥");
    return result.toJsonObject();
  }
  @Override
  public User getUser(String id)throws UnsupportedEncodingException {
    System.out.println("==========================="+id);
    return new User(1L,"明哥");
  }
}

二.發(fā)布服務

1.定義配置類

@Configuration
public class CxfConfig {
  //默認servlet路徑/*,如果覆寫則按照自己定義的來
  @Bean
  public ServletRegistrationBean dispatcherServlet() {
    return new ServletRegistrationBean(new CXFServlet(), "/services/*");
  }

  @Bean(name = Bus.DEFAULT_BUS_ID)
  public SpringBus springBus() {
    return new SpringBus();
  }

  //把實現類交給spring管理
  @Bean
  public AppService appService() {
    return new AppServiceImpl();
  }

  //終端路徑
  @Bean
  public Endpoint endpoint() {
    EndpointImpl endpoint = new EndpointImpl(springBus(), appService());
    endpoint.getInInterceptors().add(new AuthInterceptor());//添加校驗攔截器
    endpoint.publish("/user");
    return endpoint;
  }
}

2.發(fā)布服務

@SpringBootApplication
public class WebserviceApplication {

  public static void main(String[] args) {
    SpringApplication.run(WebserviceApplication.class, args);
  }
}

因為我添加了用戶名和密碼校驗所以在發(fā)布之前還需要定義自己校驗用戶名和密碼的Interceptor

public class AuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
  Logger logger = LoggerFactory.getLogger(this.getClass());
  private static final String USERNAME="root";
  private static final String PASSWORD="admin";

  public AuthInterceptor() {
    //定義在哪個階段進行攔截
    super(Phase.PRE_PROTOCOL);
  }

  @Override
  public void handleMessage(SoapMessage soapMessage) throws Fault {
    List<Header> headers = null;
    String username=null;
    String password=null;
    try {
      headers = soapMessage.getHeaders();
    } catch (Exception e) {
      logger.error("getSOAPHeader error: {}",e.getMessage(),e);
    }

    if (headers == null) {
      throw new Fault(new IllegalArgumentException("找不到Header,無法驗證用戶信息"));
    }
    //獲取用戶名,密碼
    for (Header header : headers) {
      SoapHeader soapHeader = (SoapHeader) header;
      Element e = (Element) soapHeader.getObject();
      NodeList usernameNode = e.getElementsByTagName("username");
      NodeList pwdNode = e.getElementsByTagName("password");
       username=usernameNode.item(0).getTextContent();
       password=pwdNode.item(0).getTextContent();
      if( StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){
        throw new Fault(new IllegalArgumentException("用戶信息為空"));
      }
    }
    //校驗用戶名密碼
    if(!(username.equals(USERNAME) && password.equals(PASSWORD))){
      SOAPException soapExc = new SOAPException("認證失敗");
      logger.debug("用戶認證信息錯誤");
      throw new Fault(soapExc);
    }
  }
}

現在可以發(fā)布服務了.....

發(fā)布完成后訪問http://localhost:8888/services/user?wsdl

能夠出現以下界面就是發(fā)布OK

怎么在springBoot中利用CXF實現用戶名密碼校驗

三.調用服務

1.新建調用端項目,添加依賴

2.因為示例演示了兩種調用方式,其中一種需要用到接口,所以先把服務接口拷貝一份到調用端項目中(代碼就是上面接口的代碼)

3.因為服務端添加了用戶名密碼校驗,所以調用的時候需要添加用戶名密碼信息, 所以需要使用下面的Interceptor完成添加用戶名密碼信息

/**
 * Created by sky on 2018/2/27.
 */
public class LoginInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
  private String username="root";
  private String password="admin";
  public LoginInterceptor(String username, String password) {
    //設置在發(fā)送請求前階段進行攔截
    super(Phase.PREPARE_SEND);
    this.username=username;
    this.password=password;
  }

  @Override
  public void handleMessage(SoapMessage soapMessage) throws Fault {
    List<Header> headers = soapMessage.getHeaders();
    Document doc = DOMUtils.createDocument();
    Element auth = doc.createElementNS("http://cxf.wolfcode.cn/","SecurityHeader");
    Element UserName = doc.createElement("username");
    Element UserPass = doc.createElement("password");

    UserName.setTextContent(username);
    UserPass.setTextContent(password);

    auth.appendChild(UserName);
    auth.appendChild(UserPass);

    headers.add(0, new Header(new QName("SecurityHeader"),auth));
  }
}

4.調用接口

/**
 * Created by sky on 2018/2/27.
 */
public class Cxfclient {
  //webservice接口地址
  private static String address = "http://localhost:8888/services/user?wsdl";

  //測試
  public static void main(String[] args) {
    test1();
    test2();
  }

  /**
   * 方式1:使用代理類工廠,需要拿到對方的接口
   */
  public static void test1() {
    try {
      // 代理工廠
      JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
      // 設置代理地址
      jaxWsProxyFactoryBean.setAddress(address);
      //添加用戶名密碼攔截器
      jaxWsProxyFactoryBean.getOutInterceptors().add(new LoginInterceptor("root","admin"));;
      // 設置接口類型
      jaxWsProxyFactoryBean.setServiceClass(AppService.class);
      // 創(chuàng)建一個代理接口實現
      AppService cs = (AppService) jaxWsProxyFactoryBean.create();
      // 數據準備
      String LineId = "1";
      // 調用代理接口的方法調用并返回結果
      User result = (User)cs.getUser(LineId);
      System.out.println("==============返回結果:" + result);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * 動態(tài)調用方式
   */
  public static void test2() {
    // 創(chuàng)建動態(tài)客戶端
    JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
    Client client = dcf.createClient(address);
    // 需要密碼的情況需要加上用戶名和密碼
     client.getOutInterceptors().add(new LoginInterceptor("root","admin"));
    Object[] objects = new Object[0];
    try {
      // invoke("方法名",參數1,參數2,參數3....);
      System.out.println("======client"+client);
      objects = client.invoke("getUserName", "1");
      System.out.println("返回數據:" + objects[0]);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

springboot是什么

springboot一種全新的編程規(guī)范,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。

看完上述內容,你們對怎么在springBoot中利用CXF實現用戶名密碼校驗有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯行業(yè)資訊頻道,感謝大家的支持。

網站欄目:怎么在springBoot中利用CXF實現用戶名密碼校驗
網址分享:http://aaarwkj.com/article22/ijpgcc.html

成都網站建設公司_創(chuàng)新互聯,為您提供自適應網站、App設計、網站策劃、網頁設計公司、靜態(tài)網站、域名注冊

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

網站建設網站維護公司
日本av电影一区二区三区四区| 亚洲国产自拍偷拍视频| 中文字幕变态另类一区二区| 一区二区三区四区在线视频观看| 久久国产精品av在线观看| 自拍偷拍亚洲精品偷一| 麻豆亚洲av熟女国产| 人妻露脸国语对白字幕| 欧美国内日本一区二区| 国产一级二级三级大胆视频| 一本色桃子精品久久中文字幕| 白白色发布青青在线视频观看| 国产亚洲一区二区三区乱码| 亚洲第一国产综合自拍| 91激情黑丝在线观看| 日韩精品少妇一区二区在线看| 黑寡妇精品欧美一区二区毛| 免费国产网站在线观看不卡| 国产精品粗又长一区| 草嫩av一区二区三区| 97精品在线视频免费| 色在色在线播放亚洲中文| 久久人人97超碰人人爱一久久精品 | 亚洲码欧美码一区二区三区| 欧美一区二区三区精美| 日韩av亚洲一区二区三区| 国产精品一区二区国产激情久久| 美女视频一区二区三区在线观看 | 亚洲黄色av在线免费观看| 色哟哟在线观看国产精品| 国产免费久久黄av片| 亚洲av污精品一区二区三区| 中文字幕在线精品乱码| 白白色最新福利视频二| 久久精品无人区乱码一区二区| 欧美日韩国产激情另类| 日本人妻在线一区二区三区| 欧美日韩午夜久久免费| 亚洲国产男同日韩小鲜肉| av毛片天堂在线观看| 哪里可以看日韩免费毛片|