{"id":1737,"date":"2013-11-06T17:57:31","date_gmt":"2013-11-06T22:57:31","guid":{"rendered":"http:\/\/blog.vortexbird.com\/?p=1055"},"modified":"2013-11-06T17:57:31","modified_gmt":"2013-11-06T22:57:31","slug":"proveedor-de-seguridad-propio-con-spring-security","status":"publish","type":"post","link":"https:\/\/vortexbird.com\/en\/proveedor-de-seguridad-propio-con-spring-security\/","title":{"rendered":"Proveedor de seguridad propio con Spring Security"},"content":{"rendered":"<p style=\"text-align: justify;\"><strong>\u00a1Buen d\u00eda!<\/strong><\/p>\n<p style=\"text-align: justify;\">En este <em>post<\/em> se explica c\u00f3mo implementar un proveedor de seguridad propio usando <em>Spring Security <\/em>3.1.0.<\/p>\n<p style=\"text-align: justify;\">La implantaci\u00f3n de un proveedor de seguridad propio en <em>Spring<\/em> es algo muy simple, solo se debe crear una clase que implemente la interfaz org.springframework.security.authentication.AuthenticationProvider, como se aprecia en el c\u00f3digo a continuaci\u00f3n:<\/p>\n<pre lang=\"xml\" escaped=\"true\">package com.vortexbird.demo.security;\n\nimport java.util.ArrayList; \nimport java.util.List;  \n\nimport org.springframework.context.annotation.Scope; \nimport org.springframework.security.authentication.AuthenticationProvider; \nimport org.springframework.security.authentication.UsernamePasswordAuthenticationToken; \nimport org.springframework.security.core.Authentication; \nimport org.springframework.security.core.AuthenticationException; \nimport org.springframework.security.core.GrantedAuthority; \nimport org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; \nimport org.springframework.security.core.userdetails.UserDetails; \nimport org.springframework.stereotype.Component;   \n\n@Scope(\"singleton\") \n@Component(\"VortexAuthenticationProvider\") \npublic class VortexAuthenticationProvider implements AuthenticationProvider { \t \t\n\/** \t \n* Implementacion de la seguridad propia \t \n*\/ \t\n@Override \t\npublic Authentication authenticate(Authentication authentication)throws AuthenticationException { \n\t\t \tString name = authentication.getName();         \nString password = authentication.getCredentials().toString();\n                  if (name.equals(\"admin\") &amp;&amp; password.equals(\"system\")) {             \nfinal List grantedAuths = new ArrayList();             \ngrantedAuths.add(new SimpleGrantedAuthority(\"ROLE_USER\"));             \n\tfinal UserDetails principal = new User(name, password, grantedAuths);     \n\tfinal Authentication auth = new UsernamePasswordAuthenticationToken(principal, password, grantedAuths);\n             return auth;\n         } else {\n             return null;         \n\t}\n \t}  \t\n\t\/** \t \n\t* Este metodo se llama primero cuando se autentica un usuario \t \n\t*\/ \t\n\t@Override \t\n\tpublic boolean supports(Class&lt;?&gt; authentication) { \t\t return authentication.equals(UsernamePasswordAuthenticationToken.class); \t\n\t}  \n}\n<\/pre>\n<p style=\"text-align: justify;\">Luego se debe crear el archivo de configuraci\u00f3n con la seguridad, como se muestra a continuaci\u00f3n:<\/p>\n<pre lang=\"xml\" escaped=\"true\">\n<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n<beans:beans xmlns=\"http:\/\/www.springframework.org\/schema\/security\" \t\n\txmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" \t\n\txmlns:beans=\"http:\/\/www.springframework.org\/schema\/beans\" \t\t\n\txsi:schemalocation=\"http:\/\/www.springframework.org\/schema\/security \t\thttp:\/\/www.springframework.org\/schema\/security\/spring-security-3.2.xsd \t\thttp:\/\/www.springframework.org\/schema\/beans http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\">           \t \t\n\n<http security=\"none\" pattern=\"\/login.xhtml\" \/>\n\n<http auto-config=\"true\" access-denied-page=\"\/login.xhtml\" access-decision-manager-ref=\"accessDecisionManager\"> \n\t\t \n<intercept-url pattern=\"\/XHTML\/*\" access=\"ROLE_USER,Admin\" \/>\t\n\n\t<form-login login-page=\"\/login.xhtml\" default-target-url=\"\/XHTML\/initialMenu.xhtml\" always-use-default-target=\"false\" authentication-failure-url=\"\/login.xhtml?authfailed=true\" \/> \n\t\n\t<logout invalidate-session=\"true\" logout-success-url=\"\/login.xhtml?loggedout=true\" \/> \t\n\t<\/http>\n\t<beans:bean id=\"accessDecisionManager\" class=\"org.springframework.security.access.vote.AffirmativeBased\"> \t\t<beans:property name=\"decisionVoters\"> \t\t\t\n\t<beans:list> \t\t\t\t\n\t\t<beans:bean class=\"org.springframework.security.access.vote.RoleVoter\"> \t\t\t\t\t\n\t<beans:property name=\"rolePrefix\" value=\"\" \/> \t\t\t\t\n\t<\/beans:bean> \t\t\t\t\n\t<beans:bean class=\"org.springframework.security.access.vote.AuthenticatedVoter\" \/> \t\t\t\n\t<\/beans:list> \t\t\n\t<\/beans:property>\n \t<\/beans:bean>\n\n  \t<authentication-manager>\n \t\t<authentication-provider ref=\"VortexAuthenticationProvider\" \/> \t<\/authentication-manager> \n<\/beans:beans>\n<\/pre>\n<p style=\"text-align: justify;\">Como se puede observar, VortexAuthenticationProvider es un bean que se encuentra en el contexto de Spring y es el que se debe encargar de buscar los usuarios. Desde ese m\u00e9todo se puede llamar un servicio web o cualquier sistema de autenticaci\u00f3n con el que se cuenta.<\/p>","protected":false},"excerpt":{"rendered":"<p>\u00a1Buen d\u00eda! En este post se explica c\u00f3mo implementar un proveedor de seguridad propio usando Spring Security 3.1.0. La implantaci\u00f3n &#8230; <a class=\"cz_readmore cz_readmore_no_icon\" href=\"https:\/\/vortexbird.com\/en\/proveedor-de-seguridad-propio-con-spring-security\/\"><span>Read more<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":1758,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[24],"tags":[111,92,112,113,23,114],"class_list":["post-1737","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-spring","tag-authentication-provider","tag-javaee","tag-org-springframework-security-authentication-authenticationprovider","tag-security","tag-spring","tag-spring-security-3-1"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Proveedor de seguridad propio con Spring Security - Vortexbird<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vortexbird.com\/en\/proveedor-de-seguridad-propio-con-spring-security\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Proveedor de seguridad propio con Spring Security - Vortexbird\" \/>\n<meta property=\"og:description\" content=\"\u00a1Buen d\u00eda! En este post se explica c\u00f3mo implementar un proveedor de seguridad propio usando Spring Security 3.1.0. La implantaci\u00f3n ... Leer m\u00e1s\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vortexbird.com\/en\/proveedor-de-seguridad-propio-con-spring-security\/\" \/>\n<meta property=\"og:site_name\" content=\"Vortexbird\" \/>\n<meta property=\"article:published_time\" content=\"2013-11-06T22:57:31+00:00\" \/>\n<meta name=\"author\" content=\"Vortex.bird\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vortex.bird\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/\"},\"author\":{\"name\":\"Vortex.bird\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\"},\"headline\":\"Proveedor de seguridad propio con Spring Security\",\"datePublished\":\"2013-11-06T22:57:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/\"},\"wordCount\":132,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"keywords\":[\"authentication-provider\",\"JavaEE\",\"org.springframework.security.authentication.AuthenticationProvider\",\"Security\",\"spring\",\"spring-security-3.1\"],\"articleSection\":[\"Spring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/\",\"url\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/\",\"name\":\"Proveedor de seguridad propio con Spring Security - Vortexbird\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"datePublished\":\"2013-11-06T22:57:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#primaryimage\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/proveedor-de-seguridad-propio-con-spring-security\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/vortexbird.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Proveedor de seguridad propio con Spring Security\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#website\",\"url\":\"https:\\\/\\\/vortexbird.com\\\/\",\"name\":\"Vortexbird\",\"description\":\"Desarrollo &aacute;gil de software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vortexbird.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vortexbird.com\\\/#\\\/schema\\\/person\\\/e69cef57e13dc876e812bed5602ce051\",\"name\":\"Vortex.bird\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g\",\"caption\":\"Vortex.bird\"},\"sameAs\":[\"https:\\\/\\\/vortexbird.com\"],\"url\":\"https:\\\/\\\/vortexbird.com\\\/en\\\/author\\\/vortexbird\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Proveedor de seguridad propio con Spring Security - Vortexbird","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vortexbird.com\/en\/proveedor-de-seguridad-propio-con-spring-security\/","og_locale":"en_US","og_type":"article","og_title":"Proveedor de seguridad propio con Spring Security - Vortexbird","og_description":"\u00a1Buen d\u00eda! En este post se explica c\u00f3mo implementar un proveedor de seguridad propio usando Spring Security 3.1.0. La implantaci\u00f3n ... Leer m\u00e1s","og_url":"https:\/\/vortexbird.com\/en\/proveedor-de-seguridad-propio-con-spring-security\/","og_site_name":"Vortexbird","article_published_time":"2013-11-06T22:57:31+00:00","author":"Vortex.bird","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vortex.bird","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#article","isPartOf":{"@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/"},"author":{"name":"Vortex.bird","@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051"},"headline":"Proveedor de seguridad propio con Spring Security","datePublished":"2013-11-06T22:57:31+00:00","mainEntityOfPage":{"@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/"},"wordCount":132,"commentCount":0,"image":{"@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#primaryimage"},"thumbnailUrl":"","keywords":["authentication-provider","JavaEE","org.springframework.security.authentication.AuthenticationProvider","Security","spring","spring-security-3.1"],"articleSection":["Spring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/","url":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/","name":"Proveedor de seguridad propio con Spring Security - Vortexbird","isPartOf":{"@id":"https:\/\/vortexbird.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#primaryimage"},"image":{"@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#primaryimage"},"thumbnailUrl":"","datePublished":"2013-11-06T22:57:31+00:00","author":{"@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051"},"breadcrumb":{"@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https:\/\/vortexbird.com\/proveedor-de-seguridad-propio-con-spring-security\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/vortexbird.com\/"},{"@type":"ListItem","position":2,"name":"Proveedor de seguridad propio con Spring Security"}]},{"@type":"WebSite","@id":"https:\/\/vortexbird.com\/#website","url":"https:\/\/vortexbird.com\/","name":"Vortexbird","description":"Desarrollo &aacute;gil de software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vortexbird.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vortexbird.com\/#\/schema\/person\/e69cef57e13dc876e812bed5602ce051","name":"Vortex.bird","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2df6992145042f545b1961db71214364407f18374dd916ec8351acb05d2a8380?s=96&d=mm&r=g","caption":"Vortex.bird"},"sameAs":["https:\/\/vortexbird.com"],"url":"https:\/\/vortexbird.com\/en\/author\/vortexbird\/"}]}},"_links":{"self":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts\/1737","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/comments?post=1737"}],"version-history":[{"count":0,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/posts\/1737\/revisions"}],"wp:attachment":[{"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/media?parent=1737"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/categories?post=1737"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vortexbird.com\/en\/wp-json\/wp\/v2\/tags?post=1737"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}