SpringBoot使用的心得记录

security配置

import com.yineng.corpsysland.security.*;
import com.yineng.corpsysland.web.filter.AuthorizationActiveFilter;
import com.yineng.corpsysland.web.filter.AuthorizationExpiredFilter;
import com.yineng.corpsysland.web.filter.CsrfCookieGeneratorFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.data.repository.query.SecurityEvaluationContextExtension;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.RememberMeServices;
import org.springframework.security.web.csrf.CsrfFilter;

import javax.inject.Inject;
import javax.servlet.Filter;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Inject
    private Environment env;

    @Inject
    private AjaxAuthenticationSuccessHandler ajaxAuthenticationSuccessHandler;

    @Inject
    private AjaxLogoutSuccessHandler ajaxLogoutSuccessHandler;

    @Inject
    private AuthenticationProvider authenticationProvider;

    @Inject
    private RememberMeServices rememberMeServices;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Inject
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider);
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
            .antMatchers("/oauth/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
            .csrf()
                .ignoringAntMatchers("/websocket/**")
                .ignoringAntMatchers("/api/authentication/**")
                .ignoringAntMatchers("/api/logout/**")
                .and()
            .addFilterAfter(new CsrfCookieGeneratorFilter(), CsrfFilter.class)
            .addFilterBefore(authorizationActiveFilter(), AuthenticationFilter.class)
            .addFilterAfter(authorizationExpiredFilter(), AuthenticationFilter.class)
            .rememberMe()
                .rememberMeServices(rememberMeServices)
                .rememberMeParameter("remember-me")
                .key(env.getProperty("jhipster.security.rememberme.key"))
                .and()
                .formLogin().loginPage("/login.html")
                .loginProcessingUrl("/api/authentication")
                .successHandler(ajaxAuthenticationSuccessHandler)
                .failureHandler(authenticationFailureHandler())
                .usernameParameter("j_username")
                .passwordParameter("j_password")
                .permitAll()
        .and()
            .logout()
            .logoutUrl("/api/logout")
            .logoutSuccessHandler(ajaxLogoutSuccessHandler)
            .deleteCookies("JSESSIONID")
            .permitAll()
        .and()
            .headers()
            .frameOptions()
            .disable()
        .and()
            .authorizeRequests().anyRequest().authenticated()
            .antMatchers("/activeSystem").permitAll()
            .antMatchers("/api/register").permitAll()
            .antMatchers("/api/activate").permitAll()
            .antMatchers("/api/authenticate").permitAll()
            .antMatchers("/api/account/reset_password/init").permitAll()
            .antMatchers("/api/account/reset_password/finish").permitAll()
            .antMatchers("/api/logs/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/api/**").authenticated()
            .antMatchers("/metrics/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/health/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/trace/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/dump/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/shutdown/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/beans/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/configprops/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/info/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/autoconfig/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/env/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/trace/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/api-docs/**").hasAuthority(AuthoritiesConstants.ADMIN)
            .antMatchers("/protected/**").authenticated();
    }

    @Bean
    public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
        return new SecurityEvaluationContextExtension();
    }

    @Bean
    public AuthenticationFailureHandler authenticationFailureHandler() {
        return new AjaxAuthenticationFailureHandler("/activeSystem");
    }

    @Bean
    public Filter authorizationActiveFilter() {
        return new AuthorizationActiveFilter(authenticationFailureHandler());
    }

    @Bean
    public Filter authorizationExpiredFilter() {
        return new AuthorizationExpiredFilter(authenticationFailureHandler());
    }

}

配置拦截器

import com.yineng.corpsysland.config.locale.AngularCookieLocaleResolver;
import com.yineng.corpsysland.security.TokenAuthHandler;
import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter{

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TokenAuthHandler()).addPathPatterns("/third/**");
    }
}
@Configuration@EnableWebSecurity@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
时间: 2024-11-05 20:50:22

SpringBoot使用的心得记录的相关文章

“智·商”商业技能大赛网站开发心得记录

"智·商"商业技能大赛官方网站开发心得记录 现在才来写这篇东西-不是因为忙,而是懒! 这个寒假接到了师弟的一个需求, 请我帮忙去做他们学院一个活动的官方网站,我大概了解之后就接下来了,于是我找了我基友跟我一起做这个网站. 需求是这样的: 竞赛介绍:介绍竞赛来源.历史.举办单位.本届情况等: 通知公告:主要为比赛公告等: 注意事项:关于比赛的注意事项. 队伍注册:在线注册队伍,以队伍为单位参加比赛: 试卷设置:添加试卷试题:包括设置答案以及分值: 在线答题:提供在线同时统一答题功能: 初

“小世界”项目心得记录(一)

背景: 最近准备做一个B2C的电商平台,一方面是想真正投入使用,一方面也是复习一下大学三年的学习成果,所以会以比较正规的软件开发方式进行开发,现在开始对此项目进行记录. (一)需求分析阶段: (1)此项目的建模工具不再使用之前使用的Visio.starUML,而是打算尝试使用IBM的Rational Software Architect和Sparx Systems的Enterprise Architect. (2)用例图:  参与者是与系统交互的对象,所以它不仅仅指使用系统的人:  用例的识别:

前端框架Vue学习的心得记录(过渡&动画)

目标:深入了解Vue框架(2.x版本)的组件 方法:通过看Vue的官方手册(Vue官方网站) 内容:本博客记录一些学习Vue中的心得,便于日后启发.(过渡&动画)(未完成,待继续) 注:遇到一些不懂的函数等,可以看官网的API参考. 正文; 一.概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果. 包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.css 在过渡钩子函数中使用 JavaScript 直

前端框架Vue学习的心得记录(可复用性&组合)

目标:深入了解Vue框架(2.x版本)的可复用性和组合 方法:通过看Vue的官方手册(Vue官方网站) 内容:本博客记录一些学习Vue中的心得,便于日后启发.(可复用性&组合)(未完成,待继续) 注:遇到一些不懂的函数等,可以看官网的API参考. 正文: 一.混入 二.自定义指令 三.渲染函数&JSX 四.插件 五.过滤器 原文地址:https://www.cnblogs.com/xinkuiwu/p/12011219.html

前端框架Vue学习的心得记录(工具)

目标:深入了解Vue框架(2.x版本)的工具 方法:通过看Vue的官方手册(Vue官方网站) 内容:本博客记录一些学习Vue中的心得,便于日后启发.(工具)(未完成,待继续) 注:遇到一些不懂的函数等,可以看官网的API参考. 正文: 一.单文件组件 二.单元测试 原文地址:https://www.cnblogs.com/xinkuiwu/p/12015020.html

【学习记录】关于makefile而进行的互联网学习技巧练习及学习笔记和学习心得记录(vs2010)

我也不知道作为一个完全的windows平台下的不怎么专业的软件工程学生,看到<Accelerated C++>的源代码,第一反应是:哦!我应该用make生成工程文件.然后我愉快的用AOL开始搜索相关资料. 然并卵!我一定是被什么奇怪的生物附身了.我应该直接用vs创建项目->导入文件.然后……ctrl+F5.多么完美. 可是……以下: [教程]来自于云风大大的blog(云风的 BLOG) IDE 不是程序员的唯一选择(一) 以及后面的(二)(三)(四) 以及大大写了一篇半,只为了说明用cl

会议管理心得记录(非markdown版)

前提 本文说的会议特指有开发团队成员参与的会议, 包括但不限于开发.设计.测试.运维.管理岗位的成员. 因为不同工种和行业都有其特殊性,我是一名程序员,并不太了解其他工种和行业的具体情况,不敢妄言. 术语定义 会议:本文中的“会议”指的是当团队有问题需要解决时,并且希望通过会议的形式,让若干个团队内或外的人员参与进来,通过开会讨论的方式找到解决方案.这种会议包括项目总结会.头脑风暴.周会等.不需要进行讨论.不是为了给问题找出解决方案的会议不在本文讨论范围之内,如信息宣布的会议(如宣布领导的决策)

fiddler使用心得记录

fiddler是一款非常好用的软件,通过监听8888端口来修改http,https等请求和响应,是抓包神器. 最近正在学习如何使用,现在记录下学习的一些技巧 如何支持https 点击菜单项tools,选择Telerik Fiddler options里的https勾选reuse client connections和reuse server connections意思大概是运行暂停客户端连接和运行暂停服务器端连接,点击确定. 如何使用fiddler调试手机端的http请求 点击菜单项tools,

ANE接入平台心得记录(安卓)

开发环境:FlashBuilder4.7 AIR13.0 Eclipse 由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发ANE也是可以的,由于后面需要进行调试,个人认为使用Eclipse和FlashBuilder协作调试还是较为方便的. 首先不得不说ANE的制作对于技术的要求远不如对打包流程的细心要求高,写这篇博客的时候我刚刚完成<百万手办王>项目接入TrueChina平台的ANE制作,耗时2天,基本上遇到了大大小小