Каков наилучший способ установить заголовки в URL в Java - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующий bean

    public Sample{

    @Value
    private String accoutName;

    @Value
    private String url;

    private String password; //

    @PostConstruct
        public void retrievePassword(){
             String serviceURL = url+ "?accountName=" //I have few more paramaters
             URL obj = new URL(serviceURL);
             HttpsURLConnection connection = null;= (HttpsURLConnection) obj.openConnection();
             password = readResponse(connection);//inside this i have bufferreader n all

        }
    }

}

Я запустил HTTP-запрос, получил ответ и сохранил его в пароле.

1) Как я могу убедиться, что эта переменная экземпляра безопасна?Я попытался сделать его окончательным, но получил сообщение об ошибке «Возможно, переменный пароль не был инициализирован». Эта переменная пароля будет доступна из другого компонента, определенного в контексте приложения

2), каков наилучший способ установки заголовков, еслиЯ должен установить много ... Я не хочу жестко закодировать.Спасибо

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы можете использовать URI builder.Взгляните на этот пример:

URI uriBuilder = new URIBuilder()
        .setScheme("http")
        .setHost(hostVar)
        .setPath(pathVar)
        .setParameter("parameter1", parameter1Value)
        .setParameter("parameter2", parameter2Value)
        .build();

После того как ваш URL построен, вы можете получить строковое значение, чтобы использовать его для вашего HTTP-вызова.

String url = uriBuilder.toString();
0 голосов
/ 23 мая 2018

Для настройки заголовков вы можете установить фильтр и отображение фильтра в файле web.xml следующим образом:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>com.***.CorsFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Здесь этот фильтр вызывается для каждого запроса (с использованием / *).Вы можете указать любой пользовательский путь, по которому вы хотите вызвать фильтр.

И создать реализацию фильтра, в которой вы можете указать все требуемые заголовки и приемлемые методы запроса следующим образом:

@Component
public class CorsFilter implements Filter {
    private static final Logger logger = LoggerFactory.getLogger(CorsFilter.class);

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        logger.info("Filters CORS request");
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        if(!(request.getMethod().equalsIgnoreCase("PUT")||request.getMethod().equalsIgnoreCase("DELETE"))){
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
            response.setHeader("Access-Control-Max-Age", "2592000");
            response.setHeader("Access-Control-Allow-Headers", "x-requested-with, content-type, sessionId, x-token,Set-Cookie,Access-Control-Allow-Credentials");
            response.setHeader("Set-Cookie", "sessionId=" +request.getSession().getId() +"; path=/appname; secure; HttpOnly; domain="+Constants.DOMAINURL);
            response.setHeader("Access-Control-Expose-Headers", "sessionId, x-token");
            response.addHeader("Cache-Control", "max-age=2592000");
            response.setDateHeader("Expires", System.currentTimeMillis() + 2592000000L); // 1 month in future.
            response.setDateHeader("Last-Modified", new Date().getTime());
            response.setHeader("X-Frame-Options", "DENY");
            response.setHeader("X-XSS-Protection", "1; mode=block");
            response.setHeader("X-Content-Type-Options", "nosniff");

            boolean isSendRedirect = false;
            if( !isSendRedirect)
                chain.doFilter(req, res);
          }


        logger.info("Filters CORS request");
    }

    public void init(FilterConfig filterConfig) {
    }

    public void destroy() {
    }

}
0 голосов
/ 22 мая 2018

Здесь много неизвестных.Но хорошее начало будет таким, как указано ниже:

  1. Поле пароля не может быть окончательным, так как вы будете получать значение из HTTP-вызова.Лучше сделать поле приватным и предоставить получателям правильные модификаторы доступа.

  2. Чтобы избежать дублирования HTTP-вызовов, вы можете создать BaseClass или UtilityClass, который фактически выполняет HTTP-вызов.При вызове этого метода отправьте ваш URI и другие параметры POST.И сделайте это классом Singleton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...