当前位置: 首页 > news >正文

成都网站建设推来客网站系统山东淄博网站建设的公司

成都网站建设推来客网站系统,山东淄博网站建设的公司,天津手机网站公司,自己注册网站背景 尽管有许多博客文章详细介绍了如何使用Spring Security#xff0c;但是当问题域位于标准LDAP或数据库身份验证之外时#xff0c;我仍然经常发现配置挑战。 在本文中#xff0c;我将介绍一些针对Spring Security的简单自定义#xff0c;使其能够与基于REST的API调用一起… 背景 尽管有许多博客文章详细介绍了如何使用Spring Security但是当问题域位于标准LDAP或数据库身份验证之外时我仍然经常发现配置挑战。 在本文中我将介绍一些针对Spring Security的简单自定义使其能够与基于REST的API调用一起使用。 具体来说用例是您拥有一个API服务该服务将返回包含SHA-256密码哈希的用户对象。 设定 运行此样本的先决条件是Git和Maven以及您选择的IDE已通过Eclipse和IntelliJ进行了测试。 可以在以下位置找到源代码 https : //github.com/dajevu/Spring3SecurityUsingAPI 。 拉下代码后执行以下步骤 在终端窗口中cd到位于源代码所在根目录下的Shared目录。 发出命令mvn clean install。 这将构建Shared子项目并将jar安装到本地mvn存储库中。 在Eclipse或IntelliJ中将项目导入为Maven项目。 在Eclipse中这将导致创建3个项目SharedSpringWebApp和RestfulAPI。 在IntelliJ中这将表示为子项目。 编译过程完成后不应有任何错误。 将目录更改为RestfulAPI。 然后发出命令mvn jettyrun以运行API webapp。 然后您可以发出以下URL该URL将带回以JSON表示的User对象http// localhost9090 / RestfulAPI / api / v1 / user / john 打开一个新的终端窗口cd到位于项目根目录下的SpringWebApp目录。 发出命令mvn jettyrun。 这将启动一个包含Spring Security的标准Spring Webapp。 您可以在以下位置访问单个HTML页面http// localhost8080 / SpringWebApp /。 单击“登录”链接后使用用户名john和密码doe登录。 您应该被重定向到Hello Admin页面。 为了演示该解决方案使用了三个Maven模块如下所示 SpringWebApp 。 这是一个典型的Spring Webapp仅提供一个JSP页面。 页面的内容将取决于用户当前是否登录。 首次访问该页面时将显示一个Login链接该链接将其定向到内置的Spring Security登录表单。 当他们尝试登录时 R ESTEasy客户端用于调用API服务如下所述该服务返回一个JSON字符串该字符串通过RESTEasy客户端转换为Java对象。 以下各节讨论了如何配置Spring Security的详细信息。 RestfulAPI 。 提供JSON请求的API服务。 它是使用RESTEasyJAX-RS实现配置的下一节将对其进行详细描述。 共享的 。 它包含其他两个项目之间共享的一些Java类。 具体来说用户对象DTO和RESTEasy代理定义由于RESTEasy客户端也可以使用它因此已共享。 RestfulAPI解剖 API Webapp是使用RESTEasy的Spring实现配置的。 RESTEasy文档非常详尽因此我将不对其设置进行详细说明。 定义了一个API调用在Shared项目的UserProxy中该调用返回静态JSON字符串。 API的代理或接口定义如下 Resteasy API代理 Produces(MediaType.APPLICATION_JSON) Consumes(MediaType.APPLICATION_JSON) Path(UserProxy.Urls.BASE_URL) public interface UserProxy {public interface Urls {public static final String BASE_URL /api/v1;public static final String USER /user/{username};}GETProduces( { MediaType.APPLICATION_JSON })Path(UserProxy.Urls.USER)public User getUserByUsername(PathParam(username) String username); } 对于那些熟悉JAX-RS的人来说您将可以轻松地遵循此配置。 它定义了一个API URI它将响应发送到/ api / v1 / user / {username}的URL路径的请求其中{username}被替换为实际的用户名值。 该服务的实现仅返回一个静态响应如下所示 关于唯一复杂的事情是使用用户密码的SHA-256哈希。 很快我们将看到Spring Security如何解释这一点。 访问URL时将返回以下JSON字符串 该Webapp的web.xml包含用于服务于RESTEasy请求的设置配置因此如果您好奇的话请看一下。 SpringWebApp解剖 现在我们可以看一下Spring Security的配置。 项目的web.xml文件将其配置为Spring应用程序并将文件applicationContext-security.xml指定为初始Spring配置文件。 让我们仔细看一下这个文件因为这是大多数魔术发生的地方 让我们遍历每个行号以描述其功能。 第3至5行指示Spring在com.acme目录中查找Spring支持的类并且将支持Spring批注。 第7行用于加载application.properties文件中指定的属性用于指定API主机。 第9至11行为该应用程序启用Spring Security。 通常作为http的子元素您将指定使用角色来保护哪些页面但是为了使本示例简单起见未对其进行配置。 第13-17行是基于Spring Security的自定义开始的地方。 我们通过其bean ref定义了一个名为userDetailsS​​rv的自定义身份验证提供程序。 该bean通过自定义类com.acme.security.UserDetailsS​​ervice实现第19行。 让我们仔细看一下这个类 如您所见此类实现了Spring接口org.springframework.security.core.userdetails.UserDetailsS​​ervice。 这需要覆盖方法loadUserByUsername。 此方法负责从身份验证提供者/源中检索用户。 返回的用户或者如果找不到匹配的用户则抛出UsernameNotFoundException-第28行必须包含密码属性以便Spring Security与表单中提供的内容进行比较。 如前所述在这种情况下密码以SHA-256哈希值返回。 在我们的API实现中使用API​​Helper类提取用户查找我们将在后面介绍。 然后将返回的API数据填充到名为UserDetails的自定义类中。 这将使用相同的名称实现Spring接口。 该接口需要getUsername和getPassword方法的具体实现。 Spring将在Security的下一个处理步骤中调用这些值以将这些值与Web表单中记录的值进行比较。 Spring如何将SHA-256中返回的密码与表单密码值进行比较。 如果回头看一下XML配置它包含以下设置 注意passwordEncoder 该参考指向Spring类ShaPasswordEncoder。 此类将计算通过Web表单提供的密码的SHA-256密码然后Spring会将计算出的值与我们通过API返回的值进行比较。 让我们通过看一下APIHelper类来解决这个问题 第8和9行的第一件事是注入API.host属性。 您还记得这是在application.properties文件中设置的。 这标识了要在其中发布API调用的主机因为它在本地运行所以指定了localhost。 第17至20行使用RESTEasy客户端机制之一发布JSON RESTful调用RESTEasy也具有所谓的客户端代理实现它更易于使用/代码更少但没有提供太多的低级控制。 然后通过第26行的Jackson方式将来自API的结果响应从JSON转换为User Java对象。然后将该Java对象返回给UserDetails服务。 总结/总结 如您所见定制Spring Security以针对API调用或实际上是任何外部服务进行身份验证所涉及的实际工作非常简单。 只需要实现几个类但是尝试第一次弄清楚这一点可能很棘手。 因此之所以我包括完整的端到端示例。 参考来自Jeffs SOA Ruminations博客的JCG合作伙伴 Jeff Davis 使用API​​身份验证的Spring Security 。 翻译自: https://www.javacodegeeks.com/2012/10/spring-security-using-api-authentication.html
http://www.yutouwan.com/news/128205/

相关文章:

  • 做室内装修的网站电子简历表格 个人简历
  • 地产项目网站建设ppt一级造价师准考证打印时间
  • 做网站客户一般会问什么问题ci框架建设网站案例
  • 宿迁做百度网站地点佛山企业网站建设平台
  • 不用写代码做的网站做网站需要用什么语言开发
  • 自建网站视频教程网站建设应该考虑哪些问题
  • 网站如何防盗链网站开发工资如何
  • c2c网站免费建设微信投放广告多少钱
  • 太原自助建站系统做网站前端后台
  • 上海培训网站建设wordpress 配置模板
  • 深圳网站建设的服务学做软件的网站
  • 建设网站建设工程信息泰州网1242低工程词郑州发布
  • 有那些可以自己做壁纸的网站互联网网站建设挣钱吗
  • 网站设计需要多少费用做网站除了dw
  • 展会网站源码做一套二级域名网站怎么做
  • 设计网站的功能有哪些wordpress去掉文章采集
  • 百度网站优化 件邢台营销型网站建设
  • 融资融券配资网站建设宁波网站建设兼职
  • 即墨网站开发公司阅读网站源码
  • 360免费网站空间化妆品电子商务网站开发流程描述
  • 济宁培训网站建设苏州有什么好玩的景点
  • 婚纱网站建设需求分析百度推广怎么弄
  • 织梦网站后台打开空白网站设计论文介绍
  • 开源系统网站南阳做网站公司电话
  • 番禺低价网站建设建站用哪个模板好
  • wordpress多站点用户互通只有一个人网站开发
  • wordpress对网站排名咚咚抢网站怎么做的
  • 网站模板 红色一是加强了网站建设
  • 老罗做的网站买了阿里云怎么做网站
  • 公司优化网站的案例金华官方网站建设