{"id":4414,"date":"2012-02-28T00:04:27","date_gmt":"2012-02-28T05:04:27","guid":{"rendered":"http:\/\/jianmingli.com\/wp\/?p=4414"},"modified":"2012-06-22T08:25:54","modified_gmt":"2012-06-22T13:25:54","slug":"weblogic-security-custom-identity-provider","status":"publish","type":"post","link":"https:\/\/jianmingli.com\/wp\/?p=4414","title":{"rendered":"WebLogic Security: Servlet Authentication Filter (SAF)"},"content":{"rendered":"<div class='toc wptoc'>\n<h2>Contents<\/h2>\n<ol class='toc-odd level-1'>\n\t<li>\n\t\t<a href=\"#Build_Custom_Identity_Provider\">Build Custom Identity Provider<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Build_wlfullclient.jar\">Build wlfullclient.jar<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_Eclipse_Project\">Create Eclipse Project<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_Servlet_Filter\">Create Servlet Filter<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_a_Java_Class_to_Implement:_AuthenticationProviderV2_ServletAuthenticationFilter\">Create a Java Class to Implement: AuthenticationProviderV2, ServletAuthenticationFilter<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Create_an_MBeanType_XML_File\">Create an MBeanType XML File<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Build\">Build<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#Deploy\">Deploy<\/a>\n\t\t<ol class='toc-even level-2'>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Copy_Provider_Jar\">Copy Provider Jar<\/a>\n\t\t\t<\/li>\n\t\t\t<li>\n\t\t\t\t<a href=\"#Configure_New_Provider\">Configure New Provider<\/a>\n\t\t\t<\/li>\n\t\t<\/ol>\n\t<li>\n\t\t<a href=\"#Test\">Test<\/a>\n\t<\/li>\n\t<li>\n\t\t<a href=\"#References\">References<\/a>\n\t<\/li>\n<\/ol>\n<\/ol>\n<\/div>\n<div class='wptoc-end'>&nbsp;<\/div>\n<span id=\"Build_Custom_Identity_Provider\"><h2>Build Custom Identity Provider<\/h2><\/span>\n<span id=\"Build_wlfullclient.jar\"><h3>Build wlfullclient.jar<\/h3><\/span>\n<p>* See <a href=\"?p=4139\">this post<\/a> to build a wlfullclient.jar<\/p>\n<span id=\"Create_Eclipse_Project\"><h3>Create Eclipse Project<\/h3><\/span>\n<p>* Create a new Eclipse Java project named SimpleSAF<br \/>\n* Place wlfullclient.jar in build path<br \/>\n* Copy <em>${WL_HOME}\/server\/lib\/commo.dtd<\/em> to project root directory.<br \/>\n* Create a new package named: <strong>examples.security.providers.saf.simple<\/strong><\/p>\n<span id=\"Create_Servlet_Filter\"><h3>Create Servlet Filter<\/h3><\/span>\n<p>* Create a new servlet filter named: <strong>TokenFilter.java<\/strong><\/p>\n<pre lang=\"java\">\r\npackage examples.security.providers.saf.simple;\r\n\r\nimport java.io.IOException;\r\nimport java.util.Enumeration;\r\n\r\nimport javax.servlet.*;\r\nimport javax.servlet.http.*;\r\n\r\npublic class TokenFilter implements Filter {\r\n\r\n\tprivate FilterConfig filterConfig = null;\r\n\r\n\t@Override\r\n\tpublic void destroy() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void doFilter(ServletRequest request, ServletResponse response,\r\n\t\t\tFilterChain arg2) throws IOException, ServletException {\r\n\t\tSystem.out.println(\"In do filter\");\r\n\t\tHttpServletRequest req = (HttpServletRequest) request;\r\n\t\tHttpServletResponse res = (HttpServletResponse) response;\r\n\r\n\t\tEnumeration names = ((HttpServletRequest) request).getHeaderNames();\r\n\r\n\t\twhile (names.hasMoreElements()) {\r\n\t\t\tString name = (String) names.nextElement();\r\n\t\t\tSystem.out.println(\"Header Name \" + name + \" Content \"\r\n\t\t\t\t\t+ ((HttpServletRequest) request).getHeader(name));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void init(FilterConfig fc) throws ServletException {\r\n\t\tthis.filterConfig = fc;\r\n\r\n\t}\r\n\r\n}\r\n<\/pre>\n<span id=\"Create_a_Java_Class_to_Implement:_AuthenticationProviderV2_ServletAuthenticationFilter\"><h3>Create a Java Class to Implement: AuthenticationProviderV2, ServletAuthenticationFilter<\/h3><\/span>\n<p>* Named: <strong>SimpleSampleServletAuthenticationFilter.java<\/strong><\/p>\n<pre lang=\"java\">\r\npackage examples.security.providers.saf.simple;\r\n\r\nimport javax.security.auth.login.AppConfigurationEntry;\r\nimport javax.servlet.Filter;\r\n\r\nimport weblogic.management.security.ProviderMBean;\r\nimport weblogic.security.spi.AuthenticationProviderV2;\r\nimport weblogic.security.spi.IdentityAsserterV2;\r\nimport weblogic.security.spi.PrincipalValidator;\r\nimport weblogic.security.spi.SecurityServices;\r\nimport weblogic.security.spi.ServletAuthenticationFilter;\r\n\r\npublic class SimpleSampleServletAuthenticationFilter implements\r\n\t\tAuthenticationProviderV2, ServletAuthenticationFilter {\r\n\r\n\tprivate String description;\r\n\t\r\n\t@Override\r\n\tpublic String getDescription() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\t\treturn this.description;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void initialize(ProviderMBean arg0, SecurityServices arg1) {\r\n\t\tSystem.out.println(\"SimpleSampleServletAuthenticationFilter.initialize\");\r\n\r\n\t}\r\n\r\n\t@Override\r\n\tpublic void shutdown() {\r\n\t\tSystem.out.println(\"SimpleSampleServletAuthenticationFilter.shutdown\");\r\n\t}\r\n\r\n\t@Override\r\n\tpublic Filter[] getServletAuthenticationFilters() {\r\n\t\tSystem.out.println(\"SimpleSampleServletAuthenticationFilter.getServletAuthenticationFilters\");\r\n\r\n\t\tFilter[] filters = new Filter[1];\r\n\t\tTokenFilter token = new TokenFilter();\r\n\t\tfilters[0]= token;\r\n\t\treturn filters;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic AppConfigurationEntry getAssertionModuleConfiguration() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic IdentityAsserterV2 getIdentityAsserter() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic AppConfigurationEntry getLoginModuleConfiguration() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic PrincipalValidator getPrincipalValidator() {\r\n\t\t\/\/ TODO Auto-generated method stub\r\n\t\treturn null;\r\n\t}\r\n\r\n}\r\n<\/pre>\n<span id=\"Create_an_MBeanType_XML_File\"><h3>Create an MBeanType XML File<\/h3><\/span>\n<p>* Create an XML file named: <strong>SimpleSampleServletAuthenticationFilter.xml<\/strong><\/p>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\" ?>\r\n<!DOCTYPE MBeanType SYSTEM \"commo.dtd\">\r\n\r\n<MBeanType Name=\"SimpleServletAuthenticationFilter\"\r\n\tDisplayName=\"SimpleServletAuthenticationFilter\" \r\n\tPackage=\"examples.security.providers.saf.simple\"\r\n\tExtends=\"weblogic.management.security.authentication.Authenticator\"\r\n\tImplements=\"weblogic.management.security.authentication.ServletAuthenticationFilter\"\r\n\tPersistPolicy=\"OnUpdate\">\r\n\r\n\t<MBeanAttribute Name=\"ProviderClassName\" \r\n\t\tType=\"java.lang.String\"\r\n\t\tWriteable=\"false\"\r\n\t\tPreprocessor=\"weblogic.management.configuration.LegalHelper.checkClassName(value)\"\r\n\t\tDefault=\"&quot;examples.security.providers.saf.simple.SimpleSampleServletAuthenticationFilter&quot;\" \/>\r\n\r\n\t<MBeanAttribute Name=\"Description\" Type=\"java.lang.String\"\r\n\t\tWriteable=\"false\" Default=\"&quot;WebLogic Simple Sample Servlet Authentication Filter &quot;\" \/>\r\n\r\n\t<MBeanAttribute Name=\"Version\" Type=\"java.lang.String\"\r\n\t\tWriteable=\"false\" Default=\"&quot;1.0&quot;\" \/>\r\n\r\n<\/MBeanType>\r\n<\/pre>\n<p>* Create an Ant build.xml<\/p>\n<pre lang=\"xml\">\r\n<project name=\"SimpleSAF\" default=\"build\" basedir=\".\">\r\n\r\n\t<property name=\"src.dir\" value=\"src\" \/>\r\n\t<property name=\"build.dir\" value=\"build\" \/>\r\n\t<property name=\"jdk.home\" value=\"C:\/Program Files\/Java\/jdk1.6.0_25\" \/>\r\n\t<property name=\"ant.home\" value=\"C:\/prog\/apache-ant-1.8.2\" \/>\r\n\t<property name=\"wl.lib.dir\" value=\"C:\/jml\/demo\/wls10.3\/server\/lib\" \/>\r\n\t<property name=\"wl.modules.dir\" value=\"C:\/jml\/demo\/wls10.3\/modules\" \/>\r\n\t<property name=\"namespace\" value=\"http:\/\/www.bea.com\/ns\/90\/weblogic\/security\/samples\"\/>\r\n\t<property name=\"provider.jar\" value=\"SimpleSampleServletAuthenticationFilter.jar\"\/>\r\n\r\n\t<path id=\"wl.cp\">\r\n\t\t<fileset dir=\"${jdk.home}\/lib\">\r\n\t\t    <include name=\"tools.jar\"\/>\r\n\t\t<\/fileset>\r\n\t\t<fileset dir=\"${ant.home}\/lib\">\r\n\t\t    <include name=\"*.jar\"\/>\r\n\t\t<\/fileset>\r\n\t\t<fileset dir=\"${wl.lib.dir}\">\r\n\t\t    <include name=\"wlfullclient.jar\"\/>\r\n\t\t<\/fileset>\r\n\t\t<fileset dir=\"${wl.modules.dir}\">\r\n\t\t    <include name=\"*xml*.jar\"\/>\r\n\t\t<\/fileset>\r\n\t<\/path>\r\n\t\r\n\t<!-- Copy all needed files to the build dir -->\r\n\t<target name=\"copy\" description=\"Copy files\">\r\n    \t<mkdir dir=\"${build.dir}\"\/>\r\n        <copy todir=\"${build.dir}\" flatten=\"true\">\r\n          <fileset dir=\"${basedir}\">\r\n            <include name=\"commo.dtd\"\/>\r\n          <\/fileset>\r\n        <\/copy>\r\n        <copy todir=\"${build.dir}\" flatten=\"true\">\r\n          <fileset dir=\"${src.dir}\">\r\n            <include name=\"**\/*.xml\"\/>\r\n            <include name=\"**\/*.java\"\/>\r\n          <\/fileset>\r\n        <\/copy>\r\n    <\/target>\r\n\r\n\t<target name=\"rebuild\" depends=\"clean, build\"\/>\r\n\r\n\t<target name=\"build\" depends=\"copy\">\r\n\t    <java classname=\"weblogic.management.commo.WebLogicMBeanMaker\" fork=\"true\" failonerror=\"true\">\r\n\t      <jvmarg line=\"-Dfiles=${build.dir}  -DMDFDIR=${build.dir} -DMJF=${build.dir}\/${provider.jar} -DtargetNameSpace=${namespace} -DpreserveStubs=true -DcreateStubs=true\"\/>\r\n\t      <classpath refid=\"wl.cp\"><\/classpath>\r\n\t    <\/java>\r\n\t<\/target>\r\n\r\n\t<target name=\"clean\">\r\n\t\t<delete dir=\"${build.dir}\" failonerror=\"false\"\/>\r\n\t\t<delete file=\"${provider.jar}\" failonerror=\"false\"\/>\r\n\t\t<echo message=\"Clean finish\" \/>\r\n\t<\/target>\r\n\r\n<\/project>\r\n<\/pre>\n<span id=\"Build\"><h2>Build<\/h2><\/span>\n<p>* Run Ant task <em>rebuild<\/em>. A provider jar file named <strong>SimpleSampleServletAuthenticationFilter.jar<\/strong> should be generated in the <em>build <\/em>directory.<\/p>\n<span id=\"Deploy\"><h2>Deploy<\/h2><\/span>\n<span id=\"Copy_Provider_Jar\"><h3>Copy Provider Jar<\/h3><\/span>\n<p>* Copy generated provider jar file, i.e. <em>SimpleSampleServletAuthenticationFilter.jar<\/em>,  into <em>$WL_HOME\/server\/lib\/mbeantypes<\/em> directory.<br \/>\n* Restart Weblogic server.<\/p>\n<span id=\"Configure_New_Provider\"><h3>Configure New Provider<\/h3><\/span>\n<p>* Login WLS admin console<br \/>\n* Go to <em>Security Realms > myrealm > Providers > Authentication<\/em><br \/>\n* Create a new Simple Sample Identity Asserter named <strong>SimpleSAF<\/strong><\/p>\n<span id=\"\"><h6><\/h6><\/span>\n<p>* Restart WLS<\/p>\n<span id=\"Test\"><h2>Test<\/h2><\/span>\n<span id=\"References\"><h2>References<\/h2><\/span>\n<p>* <a href=\"http:\/\/weblogic-wonders.com\/weblogic\/2010\/03\/15\/custom-identity-asserter-for-weblogic-server\/\">Custom Identity Asserter for Weblogic Server<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Build Custom Identity Provider Build wlfullclient.jar * See this post to build a wlfullclient.jar Create Eclipse Project * Create a new Eclipse Java project named SimpleSAF * Place wlfullclient.jar in build path * Copy ${WL_HOME}\/server\/lib\/commo.dtd to project root directory. * &hellip; <a href=\"https:\/\/jianmingli.com\/wp\/?p=4414\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[91],"tags":[],"class_list":["post-4414","post","type-post","status-publish","format-standard","hentry","category-weblogic"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8cRUO-19c","_links":{"self":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/4414","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4414"}],"version-history":[{"count":9,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/4414\/revisions"}],"predecessor-version":[{"id":4760,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/4414\/revisions\/4760"}],"wp:attachment":[{"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jianmingli.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}