0
点赞
收藏
分享

微信扫一扫

手把手教你java中如何使用Spring security(二)

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

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

<security:authentication-manager>的内部高级设置

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

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

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

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

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

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

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

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

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

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

在这里您可以注意到我在<security:authentication-provider>标记中提到了user-service-ref =“loginService”

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

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

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

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

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

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

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

编写Spring MVC应用程序的Controller

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

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

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

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

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

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

在Login.jsp中写入Login表单

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

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

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

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

结论

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

思考:

答:

至少有三种,

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

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

举报

相关推荐

0 条评论