spring framework在spring 3.1中添加了java配置支持。在spring security中,java配置已添加到spring security 3.2中,使我们可以配置spring security 而无需编写xml单行。
在这里,我们将创建一个实现spring的示例。安全性且未使用xml进行配置。它包括以下步骤。
第一步是创建spring security java配置。下面给出了一个简单的基本java配置。
websecurityconfig.java
package com.nhooo; import org.springframework.context.annotation.*; //import org.springframework.security.config.annotation.authentication.builders.*; import org.springframework.security.config.annotation.web.builders.httpsecurity; import org.springframework.security.config.annotation.web.configuration.*; import org.springframework.security.core.userdetails.user; import org.springframework.security.core.userdetails.userdetailsservice; import org.springframework.security.provisioning.inmemoryuserdetailsmanager; import org.springframework.web.servlet.config.annotation.webmvcconfigurer; @enablewebsecurity @componentscan("com.nhooo") public class websecurityconfig implements webmvcconfigurer { @bean public userdetailsservice userdetailsservice() throws exception { inmemoryuserdetailsmanager manager = new inmemoryuserdetailsmanager(); manager.createuser(user.withdefaultpasswordencoder().username("nhooo"). password("java123").roles("user").build()); return manager; } protected void configure(httpsecurity http) throws exception { http .antmatcher("/") .authorizerequests() .anyrequest().hasrole("admin") .and() .httpbasic(); } }
此配置创建一个称为 springsecurityfilterchain 的servlet过滤器。 负责保护应用程序url,验证提交的用户名和密码,重定向到登录表单等。
上述java配置为我们的应用程序执行以下操作。
要求对每个url进行身份验证 创建登录表单 允许用户使用基于表单的身份验证进行身份验证 允许注销 防止csrf攻击 安全标题集成等
现在,我们将向战争注册 springsecurityfilterchain 。要进行注册,spring security提供了我们需要扩展的基类abstractsecuritywebapplicationinitializer。
对于spring mvc应用程序,securitywebapplicationinitializer如下所示。
securitywebapplicationinitializer.java
package com.nhooo; import org.springframework.security.web.context.*; public class securitywebapplicationinitializer extends abstractsecuritywebapplicationinitializer { }
此代码将为我们应用程序中的每个url注册springsecurityfilterchain。
现在,将websecurityconfig加载到我们现有的applicationinitializer中并添加到getrootconfigclasses()方法。
mvcwebapplicationinitializer.java
package com.nhooo; import org.springframework.web.servlet.support.abstractannotationconfigdispatcherservletinitializer; public class mvcwebapplicationinitializer extends abstractannotationconfigdispatcherservletinitializer { @override protected class[] getrootconfigclasses() { return new class[] { websecurityconfig.class }; } @override protected class[] getservletconfigclasses() { // todo auto-generated method stub return null; } @override protected string[] getservletmappings() { return new string[] { "/" }; } }
websecurityconfigureradapter 类提供了一个configure(httpsecurity http)方法,该方法包含以下默认配置。默认定义如下所示。
protected void configure(httpsecurity http) throws exception { http .authorizerequests() .anyrequest().authenticated() .and() .formlogin() .and() .httpbasic(); }
它类似于给定的xml。
此方法执行以下操作。
它确保用户提出的每个请求都要求对用户进行身份验证 它允许用户使用基于表单的登录进行身份验证 它允许用户使用http basic身份验证进行身份验证
创建一个控制器来处理用户请求。
homecontroller.java
package com.nhooo.controller; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; @controller public class homecontroller { @requestmapping(value="/", method=requestmethod.get) public string index() { return "index"; } }
我们有一个视图(.jsp)页面 index.jsp ,其中包含以下源代码。
home page welcome to home page!
我们的完整项目如下所示。
输出:
我们在控制器中只有一个动作,只有真正的用户才能访问它。因此,当我们运行该应用程序时,它会提示您输入登录凭据。输出在下面给出。
这是 spring security提供的默认登录页面页面,我们没有创建它。尽管我们可以创建自己的登录页面并使用应用程序进行配置。我们将在下一个主题中进行此操作。
现在,提供登录凭据以进入应用程序资源。 spring security验证用户凭证并确保用户真实性。
让我们看看会发生什么?如果我们输入了错误的凭据。
单击登录按钮后,则会引发 bad credentials (错误凭据)错误。
现在,使用 正确的凭据登录。/strong>
这次凭据被匹配并显示了888棋牌游戏主页(index.jsp)。
888棋牌游戏的友情链接: