![](/img/trans.png)
[英]In java, what's the best way to read a url and split it into its parts?
[英]what is the best way to set headers in url in Java
我有以下豆
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)如何确保该实例变量是安全的? 我尝试将其设置为最终版本,但出现错误“变量密码可能尚未初始化”,将从应用程序上下文中定义的其他bean访问此密码变量
2)如果我必须设置很多...最好的方法是设置标题...我不想硬编码。 谢谢
这里有很多未知数。 但是,下面列出了一个好的开始:
密码字段不能是最终的,因为您将从HTTP调用中检索值。 更好的选择是将字段设为私有,并为getter提供适当的访问修饰符。
为避免重复HTTP调用,您可以创建实际上进行HTTP调用的BaseClass或UtilityClass。 在调用此方法时,发送您的URI和其他POST参数。 并使其成为Singleton类。
您可以使用URI构建器。 看一下这个例子:
URI uriBuilder = new URIBuilder()
.setScheme("http")
.setHost(hostVar)
.setPath(pathVar)
.setParameter("parameter1", parameter1Value)
.setParameter("parameter2", parameter2Value)
.build();
一旦构建了URL,就可以获取字符串值以将其用于HTTP调用。
String url = uriBuilder.toString();
要设置标题,可以在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() {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.