Comment puis-je forcer l'accès à une page via HTTPS uniquement. Besoin de faire cela via le fichier de configuration Spring MVC 3.Spring mvc 3 - Accès HTTPS
Répondre
Printemps-sécurité a une telle configuration. see here pour savoir comment le faire. En bref - vous forcez le canal à utiliser https:
<http>
<intercept-url pattern="/secure/**" access="ROLE_USER"
requires-channel="https"/>
<intercept-url pattern="/**" access="ROLE_USER"
requires-channel="any"/>
</http>
Si vous ne souhaitez pas utiliser-sécurité au printemps, voici un intercepteur que j'ai écrit:
@Component
public class SslInterceptor extends HandlerInterceptorAdapter {
// no need to inject it for now..
private PathMatcher pathMatcher = new AntPathMatcher();
@Value("${base.url.secure}")
private String secureRoot;
@Resource(name="secureLocations")
private List<String> secureLocations;
@Value("${use.ssl}")
private boolean useSsl;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if (useSsl && !request.isSecure() && shouldForceSecure(request.getRequestURI())) {
String redirectUrl = secureRoot + request.getRequestURI();
if (request.getQueryString() != null) {
redirectUrl += "?" + request.getQueryString();
}
// force session creation - thus it will be accessible to both the
// secure and the insecure contexts
request.getSession(true);
response.sendRedirect(redirectUrl);
return false;
}
return true;
}
private boolean shouldForceSecure(String path) {
for (String pattern : secureLocations) {
if (pathMatcher.match(pattern, path)) {
return true;
}
}
return false;
}
}
Vous pouvez le faire dans votre configuration Tomcat.
essayez d'ajouter redirectPort = "" dans le fichier server.xml au connecteur HTTP.
Espérons que ça aide.
Mise à jour:
Cet article vous expliquera comment traiter avec SSL et a beaucoup d'un exemple.
Eh bien, il aide que si elles utilisent tomcat ... – skaffman
D'accord, mais chaque serveur d'application a de telles options même IIS :). Je viens d'écrire l'idée de ce qui devrait être fait. –
S'il vous plaît pouvez-vous donner un exemple –
Pour une approche d'annotation sans la sécurité du printemps, j'ai écrit un intercepteur et une nouvelle annotation:
/**
* Request mapping annotation to enforce secure or insecure requests.
* Per default the annotated mapping is enforced to be secure.
*
* @see org.springframework.web.bind.annotation.RequestMapping
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestProtocol {
boolean secure() default true;
}
vous pouvez donc simplement déclarer (ici pour REST) méthode de commande comme ceci:
@RequestMapping(value = "/secret", method = RequestMethod.GET)
@RequestProtocol(secure = true)
@ResponseBody
public Result doSecure(@Valid Model model) {
return doSomething(model));
}
Pour activer le mappage, utilisez un intercepteur redirigeant sur le mauvais protocole. Vous pouvez également effectuer une manipulation plus simple en envoyant simplement une réponse INTERDITE.
/**
* Interceptor to send a redirect on security enforced mappings with wrong type of request.
*
* @see RequestProtocol
*/
class RequestProtocolInterceptor extends HandlerInterceptorAdapter {
private static final int PORT_DIFF = 443 - 80;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
Boolean secure = checkSecure(handler);
if (secure != null && request.isSecure() != secure) {
response.sendRedirect(switchSecure(secure, request.getRequestURL()));
return false;
}
return true;
}
private Boolean checkSecure(Object handler) {
if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod)handler;
RequestProtocol annotation = method.getMethodAnnotation(RequestProtocol.class);
if (annotation == null) {
annotation = AnnotationUtils.findAnnotation(method.getBeanType(), RequestProtocol.class);
}
return annotation == null ? null : annotation.secure();
}
return null;
}
private String switchSecure(boolean secure, StringBuffer url) {
int endSchema = url.indexOf("://");
url.replace(0, endSchema, secure ? "https" : "http");
int startPort = url.indexOf(":", endSchema + 3);
if (startPort != -1) {
int endPort = url.indexOf("/", startPort);
int port = Integer.parseInt(url.substring(startPort + 1, endPort));
port += secure ? PORT_DIFF : -PORT_DIFF;
url.replace(startPort + 1, endPort, String.valueOf(port));
}
return url.toString();
}
}
Pour activer l'intercepteur sur une annotation pure à partir de config Spring, utilisez le WebMvcConfigurerAdapter:
@Configuration
@EnableWebMvc
public class MyConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestProtocolInterceptor());
}
}
- 1. Spring MVC https comment activer?
- 2. Spring MVC 3 Mapping
- 3. Spring MVC 3 + JSON
- 4. Spring MVC 3, applicationContext.xml
- 5. Spring MVC 3 -> Validation
- 6. Spring 3 Hibernate Spring MVC Arch Type
- 7. Spring 3 emboîtées mvc: sélectionnez
- 8. MarshallingView dans Spring MVC 3
- 9. Problème utilisant Spring 3 MVC
- 10. Spring 3 JSON avec MVC
- 11. Spring MVC 3 URL débutant
- 12. Spring 3 - Accès aux messages.properties en jsp
- 13. haricots Spring MVC Accès DI de jsp
- 14. Accès Spring Web MVC Exception résolveur de contexte Spring Security
- 15. Problème courant Spring 3 Échantillon mvc-basic
- 16. Spring MVC 3 redirect/avant avec SiteMesh
- 17. Spring 3 Assistants MVC et modaux
- 18. Spring MVC 3 Global Request Mapping
- 19. Liferay 6.0.5 et Spring MVC 3 question
- 20. jQuery load() et Spring 3 MVC
- 21. Spring 3 MVC, réponse de flux asynchrone
- 22. Initialiser Singletons dans Spring Framework 3 MVC
- 23. SPRING 3 MVC - Erreur de modèle URI?
- 24. Spring MVC, Hibernate 3 et @Valid Problème
- 25. Accès à l'API Restriction ASP.NET MVC 3
- 26. accès direct aux champs au printemps MVC 3
- 27. Comment utiliser Servlet 3 @WebServlet & async avec Spring MVC 3?
- 28. Spring 3 mvc: ressources provoquant l'exécution de plusieurs mvc: intercepteurs
- 29. Accès à la demande IP source dans l'application Web Spring 3 MVC
- 30. Printemps 3 Accès MVC Variable globale depuis le contrôleur
Merci Bozho. L'exemple est superbe. Pouvez-vous également partager avec moi comment cela peut être fait en utilisant la configuration de sécurité de printemps. –
voir mis à jour .... – Bozho
Exactement ce que je veux. En fait, j'ai vu cet article avant de poster la question. Je suis nouveau à Spring MVC. J'ai mis dans le fichier de configuration du printemps, mais je recevais des erreurs d'analyse. Je sais que je demande trop, mais pouvez-vous me donner un exemple de fichier XML? Merci Bozho. –