Nous avons un site Web accessible avec HTTP et HTTPS P>
Nous avons besoin que toutes les pages soient accessibles avec HTTP fonctionnent bien, mais lorsque les utilisateurs sont connectés au site, nous avons besoin de toutes les pages qui avaient authentifié besoin d'afficher avec HTTPS P>
S'il vous plaît laissez-nous savoir quel est le moyen le plus simple d'atteindre ce p>
merci Srinivas p>
5 Réponses :
avec la magie.
juste plaisant. p>
Vous avez une sorte de routine qui fonctionne sur chaque page qui vérifie si un utilisateur est connecté, correct? Eh bien, il suffit d'ajouter une certaine logique dans cette routine qui vérifie également l'URL actuelle et les redirections à la version HTTPS si vous n'êtes pas déjà à cela. P>
if current url is not https:
redirect to replace(current url, 'http://', 'https://')
Vous pouvez le réaliser facilement avec Apache.
En supposant que vous ayez le contenu de l'utilisateur imbriqué dans le chemin "Protégé", ceci transférera toutes les demandes à partir de "/ protégées" à votre hôte HTTPS: p>
# HTTP redirect configuration
<VirtualHost *:80>
RewriteEngine on
RewriteRule ^/protected/ https://hostname/ [R]
</VirtualHost>
En supposant que vous ayez une apache devant votre Tomcat (ou tout autre serveur d'applications que vous avez) ;-)
Vérifiez si l'utilisateur est connecté, vérifiez si la connexion est HTTPS.
if (checkIfUserIsLoggedIn) {
$val = ((@$_SERVER['SERVER_PORT_SECURE'] == 1) || (@$_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://';
if ($val == 'http://') {
// reload page if it not https
header('Location: https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
}
}
Vous pouvez utiliser un filtre:
public class MyFilter implements Filter {
private FilterConfig conf;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
if (req.getRemoteUser() != null && req.getScheme().equals("http")) {
String url = "https://" + req.getServerName()
+ req.getContextPath() + req.getServletPath();
if (req.getPathInfo() != null) {
url += req.getPathInfo();
}
resp.sendRedirect(url);
} else {
chain.doFilter(request, response);
}
}
public FilterConfig getFilterConfig() {
return conf;
}
public void setFilterConfig(FilterConfig filterConfig) {
conf = filterConfig;
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
conf = filterConfig;
}
}
Merci, c'est la bonne façon et générale
Voici ma solution Scala sur la jetée (j'utilise Jetty Standalone, sans guerre).
class RedirectHandler extends ContextHandler {
override def doHandle(target: String, baseRequest: Request,
request: HttpServletRequest, response: HttpServletResponse): Unit = {
if ("http" == request.getScheme.toLowerCase) {
baseRequest setHandled true
response sendRedirect s"https://${request.getServerName}${request.getContextPath}"
}
}
}