linux切换java版本_java_home environment variable

linux切换java版本_java_home environment variable© 版权声明:本文为博主原创文章,转载请注明出处本文根据官方文档加上自己的理解,仅供参考官方文档:https://docs.spring.io/spring-security/

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

© 版权声明:本文为博主原创文章,转载请注明出处

本文根据官方文档加上自己的理解,仅供参考

官方文档:https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/reference/htmlsingle/#hello-web-security-java-configuration

介绍:

linux切换java版本_java_home environment variable

 

第一步是创建Spring Security的java配置。这个配置创建了一个Servlet过滤器被称为springSecurityFilterChain,它负责你的应用中所有的安全问题(保护应用程序的url,验证提交的用户名和密码,重定向到登录表单等等)。

你可以在下面找到Spring Security Java 配置最基础的例子:

linux切换java版本_java_home environment variable

linux切换java版本_java_home environment variable

这个配置并没有太多东西,但是做了很多。你可以找到下面的特征摘要

  • 需要验证您的应用程序中每个URL
  • 为您生成一个登录表单
  • 允许用户用username的用户名和password的密码进行基于表单的身份验证
  • 允许用户注销
  • 预防CSRF攻击
  • Session Fixation保护
  • 安全头集成
    • 为了保护请求采用HTTP强制安全传输技术
    • X-Content-Type-Options集成
    • 缓存控制(可以由应用程序稍后重写,允许缓存静态资源)
    • X-XSS-Protection集成
    • X-Frame-Options集成去防止“点击劫持”
  • 与下面的Servlet API方法集成
    • HttpServletRequest#getRemoteUser()
    • HttpServletRequest.html#getUserPrincipal()
    • HttpServletRequest.html#isUserInRole(java.lang.String)
    • HttpServletRequest.html#login(java.lang.String, java.lang.String)
    • HttpServletRequest.html#logout()

 linux切换java版本_java_home environment variable

下一步是注册springSecurityFilterChain到war中。在一个Servlet 3 +环境,可以使spring的webapplicationinitializer支持java的配置。毫无疑问的是,Spring Security提供一个基类AbstractSecurityWebApplicationInitializer

确保springSecurityFilterChain被注册,我们使用AbstractSecurityWebApplicationInitializer的方式是取决于我们已经使用了Spring还是Spring Security是我们应用中唯一的Spring组件

  • 章节5.1.2,“AbstractSecurityWebApplicationInitializer不存在Spring” – 如果你没有使用Spring用这个说明
  • 章节5.1.3,“AbstractSecurityWebApplicationInitializer存在Spring MVC” – 如果你已经使用Spring用这个说明

linux切换java版本_java_home environment variable

如果你没有使用Spring或Spring MVC,你将需要通过在WebSecurityConfig到父类确保配置被使用。你可以在下面找到一个例子:

linux切换java版本_java_home environment variable

linux切换java版本_java_home environment variable

这个SecurityWebApplicationInitializer将做到下面这些事情:

  • 自动为你的应用中的每个URL注册springSecurityFilterChain过滤器
  • 添加ContextLoaderListener加载WebSecurityConfig

linux切换java版本_java_home environment variable

如果我们已经在应用的其他地方使用了Spring,那么可能已经有了一个WebApplicationInitializer去加载我们的Spring配置。如果我们使用之前的配置可能会得到一个错误。相反,我们应该注册

Spring Security到已经存在的ApplicationContext。例如,如果我们使用Spring MVC我们的SecurityWebApplicationInitializer可能会像下面这样:

linux切换java版本_java_home environment variable

linux切换java版本_java_home environment variable

它很简单的为我们应用中的每个URL注册了springSecurityFilterChain过滤器,之后我们将确保WebSecurityConfig将被加载到已存在的ApplicationInitializer。例如:如果我们使用Spring MVC,

它将被添加在getRootConfigClasses()方法中

linux切换java版本_java_home environment variable

实例:

项目结构:

linux切换java版本_java_home environment variable

pom.xml

linux切换java版本_java_home environment variable
linux切换java版本_java_home environment variable

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springsecurity</groupId>
    <artifactId>WebSecurity</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>5.0.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>5.0.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>5.0.3.RELEASE</version>
        </dependency>
    </dependencies>
    
    <build>
    
          <finalName>WebSecurity</finalName>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.7.0</version>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
          </plugins>
    </build>
</project>

pom.xml

WebSecurityConfig.java

linux切换java版本_java_home environment variable
linux切换java版本_java_home environment variable

package org.springsecurity.config;

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@EnableWebSecurity
public class WebSecurityConfig {

    @Bean
    @SuppressWarnings("deprecation")
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder()
                .username("username").password("password").roles("USER").build());
        return manager;
    }
    
}

WebSecurityConfig.java

SecurityWebApplicationInitializer.java

linux切换java版本_java_home environment variable
linux切换java版本_java_home environment variable

package org.springsecurity.config;

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {

    public SecurityWebApplicationInitializer() {
        super(WebSecurityConfig.class);
    }

}

SecurityWebApplicationInitializer.java

 

项目预览

 

linux切换java版本_java_home environment variable

 

说明

  1. 该项目只有两个java文件
  2. pom.xml中引入的依赖,也可以在官方文档中找到。地址:https://docs.spring.io/spring-security/site/docs/5.0.3.RELEASE/reference/htmlsingle/#maven
  3. 但是自动生成了登录界面,并可用WebSecurityConfig.java中配置的用户名username和密码password进行登录
  4. 登录完成后自动跳转到index.jsp,该页面是创建web项目时自动生成的
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168046.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ORACLE游标(oracle游标属性)

    ORACLE游标(oracle游标属性)文章目录1概述1.1思维导图2语法2.1基本写法(4步)2.2游标4大属性3分类3.1静态游标3.1.1隐式游标dml3.1.2显式游标cursor3.2动态游标3.2.1自定义类型refcursor3.2.2系统类型sys_refcursor4扩展4.1三种游标循环效率对比4.2实例:实际开发中,游标遍历数据1概述1.游标是什么?用来存储多条查询数据的一种数据结构(’结果集’),它有一个’指针’,从上往下移动(’fetch’),从而能够’

    2022年4月18日
    85
  • vuex的使用之mapGetters[通俗易懂]

    vuex的使用之mapGetters[通俗易懂]vue项目中,经常会使用到vuex,vuex是vue的一个状态管理。本文简单总结一下:vuex中mapGetters的使用。如果一个变量或对象需要在多个页面和组件中使用,那么,可以使用mapGetters。一.vuex中声明变量个方法1.在state中声明:state:{freeShipping:cookie.get(‘freeShipping’),}2.在mutations中书写方法:mutations:{updatefreeShipping(state,fre

    2022年5月20日
    114
  • 从头到尾彻底理解KMP(2014年8月22日版)

    从头到尾彻底理解KMP(2014年8月22日版)从头到尾彻底理解KMP作者:July时间:最初写于2011年12月,2014年7月21日晚10点全部删除重写成此文,随后的半个多月不断反复改进。后收录于新书《编程之法:面试和算法心得》第4.4节中。1.引言本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一…

    2022年5月10日
    39
  • mysql查找最后一条记录_mysql查询记录总数

    mysql查找最后一条记录_mysql查询记录总数首先要确定什么是最后一条。是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。SQL如下:selecta,bfromtablewherea&gt;’某个时间’orderbyadesclimit1(上面SQL中a为时间)。用max(time)查询方可!!…

    2022年9月7日
    0
  • 【Github教程】史上最全github用法:github入门到精通

    【Github教程】史上最全github用法:github入门到精通

    2021年11月28日
    40
  • 图像处理算法工程师——1必备技能总结——2面试题大全[通俗易懂]

    图像处理算法工程师——1必备技能总结——2面试题大全[通俗易懂]图像算法工程师三重境界:一、传统图像算法工程师:主要涉及图形处理,包括形态学、图像质量、相机成像之3A算法、去雾处理、颜色空间转换、滤镜等,主要在安防公司或者机器视觉领域,包括缺陷检测;二、现代图像算法工程师:涉及模式识别,主要表现的经验为Adaboost、SVM的研究与应用,特征选取与提取,包括智能驾驶的研究与应用、行人检测、人脸识别;三、人工智能时代图像算法工程师:…

    2022年5月17日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号