java url 授权,Spring MVC框架 - 基本认证之URL 授权认证

[导读]为控制器添加注解是非常简单的,但这往往并不是最可行的方案。有时候,我们会想要完全控制授权功能。

为控制器添加注解是非常简单的,但这往往并不是最可行的方案。有时候,我们会想要完全控制授权功能。

移除@Secured 注解,我们将会采用一种更好的方案。

通过修改SecurityConfiguration 类,我们看一下Spring Security 允许实现什么功能:@Configuration

@EnableGlobalMethodSecurity(securedEnabled = true)

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired

public void configureAuth(AuthenticationManagerBuilder auth)

throws Exception {

auth.inMemoryAuthentication().withUser("user").password("user")

.roles("USER").and().withUser("admin").password("admin")

.roles("USER", "ADMIN");

}

@Override

protected void configure(HttpSecurity http) throws Exception {

http.httpBasic().and().csrf().disable().authorizeRequests()

.antMatchers("/login", "/logout").permitAll()

.antMatchers(HttpMethod.GET, "/api/**").hasRole("USER")

.antMatchers(HttpMethod.POST, "/api/**").hasRole("ADMIN")

.antMatchers(HttpMethod.PUT, "/api/**").hasRole("ADMIN")

.antMatchers(HttpMethod.DELETE, "/api/**").hasRole("ADMIN")

.anyRequest().authenticated();

}

}

在前面的示例代码中,我们使用Spring Security 流畅的API,配置了应用程序的安全策略。

这个 API 通过调用相关安全功能的方法,能够在全局上配置Spring Security,这些方法可以通过and()连接起来。

我们刚刚定义的是一个基本认证,没有CSRF 保护功能。任何用户都允许发送针对“/login”和“/logout”的请求。对API 的GET 请求只允许具有USER 角色的用户访问,而对API 的POST、PUT 和DELETE 请求则只允许具有ADMIN 角色的用户访问。最后,对其他内容的访问则要求用户进行过认证,不管角色是什么,都可以进行访问。

CSRF 所代表的含义是跨站请求伪造(Cross Site Request Forgery),指的是一种攻击形式,恶意的Web 站点将会在他们的网站上展示一个表单,但是会将表单的数据POST 提交到我们的站点上。如果我们站点的用户没有退出的话,那么POST 请求能够获取用户的cookie,这样的话,就会被认为是认证过的用户。

针对 CSRF 的防护会生成短期存活的token,它会随着表单数据一起进行提交。我们会在下面的章节看到如何启用该功能,现在我们先将其禁用。参考http://docs.spring.io/spring-security/site/docs/current/ reference/htmlsingle/#csrf 来了解更多细节。

tips:如果想了解针对API 请求进行认证的更多知识,可以参考:http://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#authorize-requests。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么原因成就了一位优秀的程序员?(转)

这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸。不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀,糟糕的…

用Vue.js开发一个电影App的前端界面

我们要构建一个什么样的App? 我们大多数人使用在线流媒体服务(如Netflix)观看我们最喜欢的电影或者节目。这篇文章将重点介绍如何通过使用vue.js 2 建立一个类似风格的电影流媒体WEB交互界面(见上图)。 最终的产品可以…

eclipse 函数折叠展开

为什么80%的码农都做不了架构师?>>> 一、eclipse 代码块折叠显示 核查是否开启折叠功能全局folding(window->preference->Gerneral->Editor-Structured Text)右侧Appearance 勾选Enable folding检测对应源编辑(java/javaScript&…

mysql 引擎 校对,MySQL 字符集和校对

字符集是指一种从二进制编码到某类字符符号的映射,校对是一组用于某个字符集的排序规则。每一类编码字符都有其对应的字符集和校对规则MySQL 如何使用字符集每种字符集都可能有多种校对规则,并且都有一个默认的校对规则。每个校对规则都是针对某个特定的…

CSS+HTML+JQuery简单菜单

1. [代码]style <style type"text/css"> body,ul,li,a{ margin:0; padding:0 } ul,li{ list-style-type:none } .menu{ width:270px; height:30px; line-height:30px; background:…

【研究】Metasploit自动攻击模块

环境&#xff1a;kali-linux-2017.3-vm-amd64 一、安装postgresql数据库 apt-get install postgresql apt-get install rubygems libpq-dev apt-get install libreadline-dev apt-get install libssl-dev apt-get install libpq5 apt-get install ruby-dev apt-get install lib…

用JS获取地址栏参数的方法

用JS获取地址栏参数的方法&#xff08;超级简单&#xff09;方法一&#xff1a;采用正则表达式获取地址栏参数&#xff1a;&#xff08; 强烈推荐&#xff0c;既实用又方便&#xff01;&#xff09; function GetQueryString(name){var reg new RegExp("(^|&)" …

php curl_init不能用,curl_init()函数不起作用

curl_init()函数不起作用嗨&#xff0c;我在POST请求中尝试PHP Post Request&#xff0c;认为它可能对我有用&#xff0c;我的代码如下所示$sub_req_url "http://localhost/index1.php";$ch curl_init($sub_req_url);$encoded ;// include GET as well as POST va…

php修改session生存时间,修改session的过期(生存)时间

以下我以php为例&#xff0c;万变不离其宗&#xff0c;希望对大家都有用吧。session与cookie:了解过两者的众所都知道&#xff0c;有些信息保存到cookie&#xff0c;有些出于安全问题就不能直接存到浏览器&#xff0c;这就要用到session了。然而对于浏览器&#xff0c;一般都是…

让nginx支持thinkphp rewrite模式

为什么80%的码农都做不了架构师&#xff1f;>>> Nginx环境在Nginx低版本中&#xff0c;是不支持PATHINFO的&#xff0c;但是可以通过在Nginx.conf中配置转发规则实现&#xff1a;在nginx配置文件中添加 location / { if (!-e $request_filename) { rewrite ^(…

WPS怎样设置多级标题(如四级标题)

WPS期初&#xff0c;乍一看最多只能设置三级标题。 怎样设置四级以上标题呢&#xff1f; 这里以设置四级标题为例&#xff1a; 点击‘视图’->大纲, 假如&#xff0c;现在2.3.3这一行是三级标题&#xff1a; 在下拉框里选择‘4级’就可以了。 现在可以回到普通页面上&#x…

tomcat关闭后线程依然运行解决办法

tomcat关闭后线程依然运行解决办法&#xff0c;设置线程为守护线程 守护线程与非守护线程 最近在看多线程的Timer章节&#xff0c;发现运用到了守护线程&#xff0c;感觉Java的基础知识还是需要补充。 Java分为两种线程&#xff1a;用户线程和守护线程 所谓守护线程是指在程序运…

一维有限元法matlab,有限元matlab研究.ppt

* 有限元方法——介绍 有限元方法是数值求解偏微分方程边值问题的一种方法&#xff0c;此方法首先于20世纪50年代初由工程师提出&#xff0c;并用于求解简单的结构问题。有限元方法是这一种系统的数值方法&#xff0c;并奠定其数学基础&#xff0c;是在60年代中期以冯康先生为代…

matlab实现主成分分析(遥感图像处理)

数据说明&#xff1a;采用的数据源是从别人那里拷的2012年全年的Sea Surface Temperature&#xff08;海标温度&#xff0c;SST&#xff09;数据&#xff0c;一直想找一份比较好的主成分分析数据&#xff0c;也没找到。 Matlab自身有主成分分析的函数princomp&#xff0c;其中返…

Struts1和Struts2的区别和对比(完整版)(转)

Struts1和Struts2的区别和对比&#xff08;完整版&#xff09;&#xff08;转&#xff09; Struts1和Struts2的区别和对比:Action 类: • Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口&#xff0c;而struts2的Action是接口。 • Str…

SQL Server中关于跟踪(Trace)那点事

前言 一提到跟踪俩字&#xff0c;很多人想到警匪片中的场景&#xff0c;同样在我们的SQL Server数据库中“跟踪”也是无处不在的&#xff0c;如果我们利用好了跟踪技巧&#xff0c;就可以针对某些特定的场景做定向分析&#xff0c;找出充足的证据来破案。 简单的举几个应用场景…

php怎么获取用户所在地址,php获取客户端ip及获取ip所在地址

// 获取ipfunction ip(){if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))$ip $_SERVER["HTTP_X_FORWARDED_FOR"];else if (isset($_SERVER["HTTP_CLIENT_IP"]))$ip $_SERVER["HTTP_CLIENT_IP"];else$ip $_SERVER["REMOTE_ADDR&…

linux中的rm 删除命令

1.rm 不仅可以删除目录还可以删除文件-f, --force 强制删除。忽略不存在的文件&#xff0c;不提示确认-i 在删除前需要确认-I 在删除超过三个文件或者递归删除前要求确认。此选项比-i 提 示内容更少&a…

在Windows上面安装多个Memcached

在Windows上面安装多个Memcached sc create "memcached Server3" start auto binPath "D:\memcached-1.4.4\memcached.exe -d runservice -m 32 -p 22122" DisplayName "memcached Server3" 转载于:https://www.cnblogs.com/stono/p/8092765.ht…

前端面试

1、如何理解js的闭包 2、js的事件冒泡 3、jquery的跨域请求 4、margin和padding的区别 5,、用过哪些前端框架转载于:https://www.cnblogs.com/iwenwen/p/3959677.html