java url路径包含中文_手把手教你java中如何使用Spring security(二)

上一篇,我们讲述的spring security的基础使用。但是对于一些复杂权限场景,我们需要更高级一些的功能。

我们接着往下展示它的高级部分。

的内部高级设置

在上一篇的Spring security设置示例中,我设置了authentication-manager来检查登录用户凭证,并使用标签中定义的纯文本用户。如下所示,您可以在此处为您的应用程序定义多个用户。

942af5d4419e570a7ed5f7a957570f53.png

上面的方式,是简单的校验。对于更复杂的,比如要对数据库中的Users表进行身份验证,则可以使用替换 ... security:user-service>标记。如下。

85be3a1c7ea377d38a705d24d1e85ca0.png

在这里,您执行SQL查询以从数据库中的“users”表中获取用户名和密码。

类似地,用户名的授权权限也从“user_roles”数据库表中获取。

在这里您可以注意到我在“data-source-ref”属性中提到了数据源引用。这是“dataSource”。

因此,您需要在应用程序Context xml文件中定义一个id =“dataSource”的Bean。如下。

931d610c99586c0838a87663f1367a3b.png

我在上面的数据库属性标记的“value”中提供了占位符。您可以用实际值替换它们。

如果要通过数据访问对象层(DAO)@Service对数据库中的Users表进行身份验证,则可以按如下方式进行配置。

93508e0cc50bb369880eaf23072db946.png

在这里,您执行SQL查询以从数据库中的“users”表中获取用户名和密码。

类似地,用户名的授权权限也从“user_roles”数据库表中获取。

在这里您可以注意到我在标记中提到了user-service-ref =“loginService”

spring安全性将使用名为“loginService”的存储库服务获取身份验证。

我们可以为我们的登录服务创建数据访问对象接口和实现。

比如:我们创建一个名为“LoginDAO.java”的接口java类

4de2f05d6951b2570772bd91a23e1efa.png

com.stiti.model.AppUser和 AppUserRole是Model类。

您可以使用自己的方式获取数据库用户和用户角色表并定义 findUserByUsername(String username)函数体。

findUserByUsername(String username)返回AppUser类型对象。

cb9f78ab4ccf0a622edee8940517a6ab.png

findUserByUsername(String username) 返回AppUser类型对象。

0371537397da59261dccee8e941df81e.png

编写Spring MVC应用程序的Controller

现在我们需要编写Spring MVC应用程序的Controller。

我们需要在Controller类中为应用程序的主路径定义一个RequestMapping方法,该路径在我的示例“/”中。当用户打开应用程序URL例如“http://www.example.com/”时,执行为该请求映射定义的以下方法“loadHomePage()”。在此方法中,它首先获得对此URL的用户身份验证和授权。

Spring-security将首先检查spring配置中的,以查找允许访问此url路径的角色。在此示例中,它查找允许具有角色“USER”的用户访问此URL路径。如果用户有一个角色= USER,那么它将加载主页。

否则,如果它是匿名用户,则spring安全校验会将它重定向到登录页面。

103edecc293cd0e66d0745349df48de9.png

在我们的Controller类中定义RequestMapping方法以加载自定义“登录页面”,前提是您在Spring 标记中提到了自定义登录页面URL。否则无需为Login页面定义任何控制器方法,spring会自动将用户带到spring-security的默认登录表单页面,这是一个由spring-security本身编写的简单JSP页面。

bea48e2e1dc9e6bea6ed8e3735983679.png

在我们的Controller类中为spring-security config中标记中定义的“logout-success-url”定义一个方法。对于此示例,我将“logout-success-url”定义为“/ logout”。

613d5612460cf4ac7a12dcdcd5adb6df.png

在Login.jsp中写入Login表单

现在让我们看一下登录表单中Login.jsp应包含的内容。

5d4fbcfa989387e58e3eac3dfd095fb0.png

这里Form动作提交到“/ j_spring_security_check”。

“j_spring_security_check” - 是一个进行实际身份验证的Servlet,您必须将登录表单的操作映射到此Servlet。

“/ j_spring_security_check”URL必须由web.xml中的springSecurityFilterChain过滤器处理

结论

为了在应用程序中实现安全性,开发人员必须在他的应用程序中执行很多操作。Spring安全性通过简化方法来替代所有这些开销。它很容易插入应用程序,Spring安全本身可以处理应用程序的所有安全方面,并为您的应用程序提供严格的安全性。

思考:

authentication-manager有几种方式来校验用户名/密码?

答:

至少有三种,

  1. security:user配置固定的用户名/密码方式,最简单;
  2. jdbc-user-service 配置sql语句校验方式
  3. user-service-ref配置service bean进行校验,此方式自定义扩展

转发+转发+转发+私信关键词 【学习】 即可免费领取JAVA资料+面试文档!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值