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

唐山官方网站建设潍坊网络营销外包

唐山官方网站建设,潍坊网络营销外包,wordpress网站底部版权代码,网站建立快捷方式使用Spring Boot与Spring MVC进行Web开发时#xff0c;如果项目引入spring-boot- starter-security依赖启动器#xff0c;MVC Security 安全管理功能就会自动生效#xff0c;其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。…使用Spring Boot与Spring MVC进行Web开发时如果项目引入spring-boot- starter-security依赖启动器MVC Security 安全管理功能就会自动生效其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。其中SecurityAutoConfiguration会导入并自动化配置SpringBootWebSecurityConfiguration用于启动Web安全管理UserDetailsServiceAutoConfiguration则用于配置用户身份信息。 通过自定义WebSecurityConfigurerAdapter 类型的Bean组件可以完全关闭Security 提供的Web应用默认安全配置但是不会关闭UserDetailsService用户信息自动配置类。如果要关闭UserDetailsService默认用户信息配置可以自定义UserDetailsService、AuthenticationProvider或AuthenticationManager类型的Bean组件。另外可以通过自定义WebSecurityConfigurerAdapter类型的Bean组件覆盖默认访问规则。Spring Boot 提供了非常多方便的方法可用于覆盖请求映射和静态资源的访问规则。 下面我们通过Spring Security API查看WebSecurityConfigurerAdapter的主要方法具体所示 configure(AuthenticationManagerBuilder auth)定制用户认证管理器来实现用户认证 configure(HttpSecurity http)定制基于HTTP请求的用户访问控制 从上面可以看到WebSecurityConfigurerAdapter类中包含两个非常重要的配置方法分别是configure(AuthenticationManagerBuilder auth)和configure(HttpSecurity http)。Configure(AuthenticationManagerBuilder auth)方法用于构建认证管理器configure(HttpSecurity http)方法用于对基于HTTP的请求进行请求访问控制。 一、自定义用户认证 通过自定义WebSecurityConfigurerAdapter类型的Bean组件并重写configure(AuthenticationManagerBuilder auth)方法可以自定义用户认证。针对自定义用户认证Spring Security提供了多种自定义认证方式 包括有: In-Memory Authentication (内存 身份认证)、JDBCAuthentication ( JDBC身份认证)、LDAP Authentication ( LDAP身份认证)、AuthenticationProvider (身份认证提供商)和UserDetailsService (身份详情服务)。 下面我们选取其中3个比较有代表性的方式讲解如何实现自定义用户认证。 二、自定义用户授权管理 当一个系统建立之后通常需要适当地做一些权限控制使得不同用户具有不同的权限操作系统。例如一般的项目中都会做一些简单的登录控制只有特定用户才能登录访问。接下来我们针对Web应用中常见的自定义用户授权管理进行介绍。 自定义用户访问控制 实际生产中网站访问多是基于HTTP请求的上面MVC Security 安全配置介绍时我们已经分析出通过重写WebSecurityConfigurerAdapter类的configure(HttpSecurity http)方法可以对基于HTTP的请求访问进行控制。下面我们通过对configure(HttpSecurity http)方法剖析分析自定义用户访问控制的实现过程。 configure(HttpSecurity http)方法的参数类型是HttpSecurity类HttpSecurity类提供了Http请求的限制以及权限、Session 管理配置、CSRF跨站请求问题等方法具体如下所示。 HttpSecurity 类的主要方法及说明 authorizeRequests()开启基于HtpSereleRequest请求访问的限制 formLogin()开启基于表单的用户登录 httpBasic()开启基于HTTP请求的Basic认证登录 logout()开启退出登录的支持 sessionManagement()开启Session管理配置 rememberMe()开启记住我功能 csrf()配置CSRF跨站请求伪造防护功能 此处重点讲解用户访问控制这里先对authorizeRequests()方法的返回值做进一步查看其中涉及用户访问控制的主要方法及说明如下所示。 antMatchers(java.lang.String .. antPatterns)开启Ant风格的路径匹配 mvcMatchers(java.lang. String ... patterns)开启MVC风格的路径匹配(与Ant风格类似) regexMatchers(java.lang String... regexPatterns)开启正则表达式的路径匹配 and()功能连接符 anyRequest()匹配任何请求 rememberMe()开启记住我功能 access(String attribute)匹配给定的SpEL表达式计算结果是否为true hasAnyRole(String .. roles)匹配用户是否有参数中的任意角色 hasRole(String role)匹配用户是否有某一个角色 hasAnyAuthority(String .. authorities)匹配用户是否有参数中的任意权限 hasAuthority(String authority)匹配用户是否有某一个权限 authenticated()匹配已经登录认证的用户 fullyAuthenticated()匹配完整登录认证的用户(非rememberMe登录用户) haslpAddress(String ipaddressExpression)匹配某IP地址的访问请求 permitAll()无条件对请求进行放行 上面列举了用户请求访问的常用方法如果想了解更多方法可以通过查看API文档。 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Overrideprotected void configure(HttpSecurity http) throws Exception {// 授权http.authorizeRequests().antMatchers(/user/setting,/user/upload,/discuss/add,/comment/add/**,/letter/**,/notice/**,/like,/follow,/unfollow).hasAnyAuthority(AUTHORITY_USER,AUTHORITY_ADMIN,AUTHORITY_MODERATOR).antMatchers(/discuss/top,/discuss/wonderful).hasRole(AUTHORITY_USER).anyRequest().permitAll().and().formLogin();} } 自定义用户登录 formLogin()是开启基于表单的用户登录所以下面就围绕formLogin()这个方法来探索并讲解自定义登录的具体实现。 用户登录相关的主要方法及说明如下所示。 loginPage(String loginPage)用户登录页面跳转路径默认为get请求的/login successForwardUrl(String forwardUrl)用户登录成功后的重定向地址 successHandler(AuthenticationSuccessHandler successHandler)用户登录成功后的处理 defaultSuccessUrl(String defaultSuccessUrl)用户直接登录后默认跳转地址 failureForwardUrl(String forwardUrl)用户登录失败后的重定向地址 failureUrl(String authenticationFailureUrl)用户登录失败后的跳转地址默认为/login?error failureHandler(AuthenticationF ailureHandler authenticationF ailureHandler)用户登录失败后的错误处理 usernameParameter(String usernameParameter)登录用户的用户名参数默认为username passwordParameter(String passwordParameter)登录用户的密码参数默认为password loginProcessingUrl(String loginProcessingUr)登录表单提交的路径默认为post请求的login permitAIl()无条件对请求进行放行 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Overrideprotected void configure(HttpSecurity http) throws Exception {// 自定义用户登录控制http.formLogin().loginPage(/userLogin).permitAll().usernameParameter(name).passwordParameter(pwd).defaultSuccessUrl(/).failureUrl(/userLogin?error);} } 自定义用户退出 自定义用户退出主要考虑退出后的会话如何管理以及跳转到哪个页面。HttpSecurity 类的logout()方法用来处理用户退出它默认处理路径为“logout”的Post类型请求同时也会清除Session和“Remember Me”(记住我)等任何默认用户配置。下面我们就围绕logout)这个方法来探索并讲解自定义用户退出的具体实现。 logout()方法中涉及用户退出的主要方法及说明如下所示。 logoutUrI(String logoutUrl)用户退出处理控制URL默认为post请求的logout logoutSuccessUrl(String logoutSuccessUrI) 用户退出成功后的重定向地址 logoutSuccessHandler(LogoutSuccessHandle logoutSuccessHandler)用户退出成功后的处理器设置 deleteCookies(String ... cookieNamesToClear)用户退出后删除指定Cookie invalidateHttpSession(boolean invalidateHttpSession)用户退出后是否立即清除Session (默认为true ) clearAuthentication(boolean clearAuthentication)用户退出后是否立即清除Authentication用户认证信息(默认为true) Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Overrideprotected void configure(HttpSecurity http) throws Exception {// 自定义用户退出控制http.logout().logoutUrlUrl(/mylogout).logoutSuccessUrl(/);} } 记住我功能 在实际开发中有些项目为了用户登录方便还会提供记住我( Remember-Me )功能。如果用户登录时勾选了记住我选项那么在一段有效时间内会默认自动登录并允许访问相关页面这就免去了重复登录操作的麻烦。Spring Security提供了用户登录控制的同时当然也提供了对应的记住我功能前面介绍的HttpSecurity类的主要方法rememberMe()就是Spring Security 用来处理记住我功能的。下面我们围绕rememberMe()这个方法来探索并讲解记住我功能的具体实现。 rememberMe()记住我功能相关涉及记住我的主要方法及说明如下所示。 rememberMeParameter(String rememberMeParameter)指示在登录时记住用户的HTTP参数 key(String key)记住我认证生成的Token令牌标识 tokenValiditySeconds(int tokenValiditySeconds)记住我Token令牌有效期单位为s (秒) tokenRepository(PersistentTokenRepository tokenRepository)指定要使用的PersistentTokenRepository用来配置持久化Token令牌 alwaysRemember(boolean alwaysRemember)是否应该始终创建记住我Cookie默认为false clearAuthentication(boolean clearAuthentication)是否设置Cookie为安全的如果设置为true,则必须通过HTTPS进行连接请求 需要说明的是Spring Security 针对记住我功能提供了两种实现:一种是简单地使用加密来保证基于Cookie中Token的安全另一种是通过数据库或其他持久化机制来保存生成的Token。下面我们分别对这两种记住我功能的实现进行讲解并演示说明。 基于简单加密Token 的方式 基于简单加密Token的方式实现记住我功能非常简单当用户选择记住我并成功登录后Spring Security将会生成一个Cookie并发送给客户端浏览器。 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Overrideprotected void configure(HttpSecurity http) throws Exception {// 定制Remember-Me记住我功能http.rememberMe().rememberMeParameter(rememberme).tokenValiditySeconds(200);} } 基于持久化Token的方式 持久化Token的方式与简单加密Token的方式在实现Remember -Me功能上大体相同都是在用户选择[记住我]并成功登录后将生成的Token存入Cookie中并发送到客户端浏览器在下次用户通过同一客户端访问系统时系统将直接从客户端Cookie中读取Token进行认证。两者的主要区别在于:基于简单加密Token的方式生成的Token将在客户端保存一段时间如果用户不退出登录或者不修改密码那么在Cookie失效之前任何人都可以无限制地使用该Token进行自动登录;而基于持久化Token的方式采用如下实现逻辑。 用户选择[记住我]成功登录后Security会把username、随机产生的序列号、生成的Token进行持久化存储(例如一个数据表中)同时将它们的组合生成一个 Cookie发送给客户端浏览器。当用户再次访问系统时首先检查客户端携带的Cookie如果对应Cookie 中包含的username、序列号和Token与数据库中保存的一致则通过验证并自动登录同时系统将重新生成一个新的Token替换数据库中旧的Token并将新的Cookie再次发送给客户端。如果Cookie中的Token不匹配则很有可能是用户的Cookie被盗用了。由于盗用者使用初次生成的Token进行登录时会生成一个新的 Token所以当用户在不知情时再次登录就会出现Token不匹配的情况这时就需要重新登录并生成新的Token和Cookie。同时Spring Security就可以发现Cookie可能被盗用的情况它将删除数据库中与当前用户相关的所有Token记录这样盗用者使用原有的Cookie将不能再次登录。如果用户访问系统时没有携带Cookie, 或者包含的username和序列号与数据库中保存的不-致那么将会引导用户到登录页面。 从以上实现逻辑可以看出持久化Token的方式比简单加密Token的方式相对更加安全。使用简单加密Token的方式一旦用户的Cookie被盗用在Token有效期内盗用者可以无限制地自动登录进行恶意操作直到用户本人发现并修改密码才会避免这种问题;而使用持久化Token的方式相对安全用户每登录一次都会生成新的Token和Cookie但也给盗用者留下了在用户进行第2次登录前进行恶意操作的机会只有在用户进行第2次登录并更新Token和Cookie时才会避免这种问题。因此总体来讲对于安全性要求很高的应用不推荐使用Remember -Me功能。 CSRF防护功能 CSRF (Cross-site request forgery跨站请求伪造)也被称为“One Click Attack”(一键攻击)或者”Session Riding” (会话控制)通常缩写为CSRF或者XSRF是一种对网站的恶意利用。与传统的XSS攻击( Cross-site Scriping跨站脚本攻击)相比CSRF攻击更加难以防范被认为比XSS更具危险性。CSRF攻击可以在受害者毫不知情的情况下以受害者的名义伪造请求发送给攻击页面从而在用户未授权的情况下执行在权限保护之下的操作。 例如一个用户Tom登录银行站点服务器准备进行转账操作在此用户信息有效期内Tom 被诱导查看了一个黑客恶意网站该网站就会获取到Tom登录后的浏览器与银行网站之间尚未过期的Session信息而Tom浏览器的Cookie中含有Tom银行账户的认证信息此时黑客就会伪装成Tom认证后的合法用户对银行账户进行非法操作。 在讨论如何抵御CSRF攻击之前先要明确CSRF攻击的对象也就是要保护的对象。从上 面的例子可知CSRF 攻击是黑客借助受害者的Cookie骗取服务器的信任但是黑客并不能获取Cookie,也看不到Cookie 的具体内容。另外对于服务器返回的结果由于浏览器同源策略的限制黑客无法进行解析。黑客所能做的就是伪造正常用户给服务器发送请求以执行请求中所描述的命令在服务器端直接改变数据的值而非窃取服务器中的数据。因此针对CSRF攻击要保护的对象是那些可以直接产生数据变化的服务而对于读取数据的服务可以不进行CSRF保护。例如银行转账操作会改变账号金额需要进行CSRF保护。获取银行卡等级信息是读取操作不会改变数据可以不需要保护。在业界目前防御CSRF攻击主要有以下3种策略。 (1)验证HTTP Referer字段。 (2)在请求地址中添加Token并验证。 (3)在HTTP头中自定义属性并验证。 Spring Security安全框架提供了CSRF防御相关方法具体如下所示。 disable()关闭Security默认开启的CSRF防御功能 csrfTokenRepository(CsrfTokenRepositor csrfTokenRepository)指定要使用的CsrfTokenRepository ( Token令牌持久化仓库)。默认是由LazyCsrfTokenRepository包装的HttpSessionCsrfTokenRepository rgurerProtetionatchereqestMatcher requireCSsrfProtectionMatcher)指定针对什么类型的请求应用CSRF防护功能。默认设置是忽略GET、HEAD、TRACE和OPTIONS请求而处理并防御其他所有请求 Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { Overrideprotected void configure(HttpSecurity http) throws Exception {// 可以关闭Spring Security默认开启的CSRF防护功能http.csrf().disable();;} }
http://www.hkea.cn/news/14467303/

相关文章:

  • 网站运营的内容项目网络图怎么画
  • 楼盘动态优化后的网站
  • 淮安网站开发工程师招聘网企业内部网站建设费用
  • 网站空间后台怎么进入研发工程师和开发工程师
  • 网站建设培训班南宁免费建网
  • 网站弹出窗口js追波设计网站
  • 南通 网站建设河南搜索引擎推广价格
  • 哪个网站可以做1040鞍山吧 百度贴吧
  • 国内p2p网站建设海珠建网站公司
  • 广州网站设计哪家公司好网站介绍怎么写范文
  • 商城网站开发多php网站开发实例教程
  • 凸一品牌策划公司镇江seo方案
  • 找人做网站内容自己编辑吗电子东莞网站建设
  • 如何把网站建设好好的seo平台
  • 网站 规划方案工业企业在线平台
  • 最好网站建站公司上海环球金融中心多少层
  • 深圳网站运营托管青海省建设厅网站执业
  • 免费网站怎么赚钱建设网站会员
  • 网站开发的背景知识和技术建网站大概多少费用
  • 珠海门户网站制作费用深圳app定制开发外包公司
  • 如何自学网站后台如何网页截图快捷键
  • 西宁网站建设开发德州做网站的公司有哪些
  • 济宁软件开发网站建设wordpress 作者 链接
  • 建设银行唐山分行网站怎么维护网站
  • 个人网页模板网站免费网站模板网
  • php网站开发步骤展示性公司网站html
  • 龙岩网站设计 信任推商吧做词金诚信矿业建设集团有限公司网站
  • 四川网站建设培训wordpress 对话
  • 建站系统低价建站新闻资讯如何网站建设公司
  • 网站前台后台齐装网装修公司