Возвращать признаки HttpServletRequest с RequestContextHolder

Я работаю с JWT и необходимо манипулировать claims с класса, для этого верит следующая AuthContextHolder.java:

package com.payulatam.ppp4.secure.api.controllers;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.payulatam.ppp4.secure.api.model.commons.SecureApiResources;

import io.jsonwebtoken.Claims;

public class AuthContextHolder {

    public Integer getWebUserId(){
        return getIntegerClaims(SecureApiResources.WEB_USER_ID_PARAM);
    }

    public Integer getMerchantId(){
        return getIntegerClaims(SecureApiResources.MERCHANT_ID_PARAM);
    }

    public Integer getDefaultAccountId(){
        return getIntegerClaims(SecureApiResources.DEFAULT_ACCOUNT_ID_PARAM);
    }

    public Integer getIntegerClaims(String claimParameter){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        final Claims claims = (Claims) request.getAttribute(SecureApiResources.CLAIMS_ATTR);
        return (Integer) claims.get(claimParameter);
    }

}

Perso я появляется сомнение из, если этот класс может быть улучшенным через использование главного файла или с отличным подходом.

Далее я показываю пример осуществления этого класса:

private AuthContextHolder authContextHolder = new AuthContextHolder();

@RequestMapping(value = SecureApiResources.Asobancaria.URL_ASOBANCARIA_MERCHANT_ACCOUNTS, method = RequestMethod.GET, produces = "application/json")

public @ResponseBody List<AccountAsobancariaBank> getAccountsAsobancaria() throws Exception {

    List<AccountAsobancariaBank> asobancariaData = asobancariaService.getAccounts(authContextHolder.getMerchantId());

    if ((asobancariaData.get(0) == null)) {
        HttpErrors httpErrors = new HttpErrors(
        SecureApiResources.ERROR_ACCOUNTS_NOT_FOUND);
        throw new EntityNotFoundException(httpErrors);
    }

    return asobancariaData;
}

Я благодарен за Ваши советы.

0
задан 04.03.2016, 18:15
1 ответ

Как они комментируют тебе, что я не вижу совсем не плохой в тебе cГіdigo, но хочешь ли ты увидеть другой подход я присоединяю тебя я versiГіn твоего класса, уменьшаю число mГ©todos и уменьшаю видимость mГ©todo getIntegerClaims, и верю в тип enum для имени параметров, следующей формы:

public class AutoContextHolder {
  public static Integer get(Params paramName) {
    return getIntegerClaims(paramName.getValue());
  }

  private static Integer getIntegerClaims(String claimParameter) {
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
    final Claims claims = (Claims) request.getAttribute(SecureApiResources.CLAIMS_ATTR);
    return (Integer) claims.get(claimParameter);
  }

  public enum Params {
    WEB_USER_ID(SecureApiResources.WEB_USER_ID_PARAM),
    MERCHANT_ID(SecureApiResources.MERCHANT_ID_PARAM),
    DEFAULT_ACCOUNT_ID(SecureApiResources.DEFAULT_ACCOUNT_ID_PARAM);

    Params(String paramName) {
      this.paramName=paramName;
    }

    public String getValue() {
      return paramName;
    }

    private String paramName;
  }

}

, использовав cГіdigo, остался бы asГ-: Такой

List<AccountAsobancariaBank> asobancariaData =asobancariaService.getAccounts(AutoContextHolder.get(Params.MERCHANT_ID));

Как ты говорил, что это другая точка зрения.

2
ответ дан 24.11.2019, 14:46