我有一个使用Spring Security的Spring MVC Web应用程序.我想知道当前登录用户的用户名.我正在使用下面给出的代码段.这是接受的方式吗?
我不喜欢在这个控制器中调用静态方法 - 这违背了Spring的全部目的,恕我直言.有没有办法配置应用程序以注入当前的SecurityContext或当前的身份验证?
@RequestMapping(method = RequestMethod.GET)
public ModelAndView showResults(final HttpServletRequest request...) {
final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
...
}
Run Code Online (Sandbox Code Playgroud) 问题:
我们有一个基于Spring MVC的RESTful API,它包含敏感信息.应该保护API,但是不希望向每个请求发送用户的凭证(用户/通过组合).根据REST准则(和内部业务要求),服务器必须保持无状态.API将由mashup风格的方法由另一台服务器使用.
要求:
客户端.../authenticate使用凭据向(未受保护的URL)发出请求; 服务器返回一个安全令牌,其中包含足够的信息,供服务器验证将来的请求并保持无状态.这可能包含与Spring Security的Remember-Me Token相同的信息.
客户端对各种(受保护的)URL进行后续请求,将先前获得的令牌附加为查询参数(或者不太希望的是HTTP请求头).
不能指望客户存储cookie.
由于我们已经使用Spring,因此该解决方案应该使用Spring Security.
我们一直在试图让这项工作碰壁,所以希望那里的人已经解决了这个问题.
鉴于上述情况,您如何解决这一特殊需求?
是否可以在方法中使用多个@RequestMapping spring注释?喜欢:
@RequestMapping("/")
@RequestMapping("")
@RequestMapping("/welcome")
public String welcomeHandler(){
return("welcome");
}
Run Code Online (Sandbox Code Playgroud) 有概念和实现Spring Security的,如GrantedAuthority界面得到一个权威授权/控制的访问.
我希望这是允许的操作,例如createSubUsers或deleteAccounts,我允许管理员(带角色ROLE_ADMIN).
我在网上看到的教程/演示让我感到困惑.我尝试连接我读到的内容,但我认为我们可以互换地对待这两者.
我看到hasRole消费了一个GrantedAuthority字符串?我肯定在理解上做错了.这些概念在Spring Security中是什么?
如何存储用户的角色,与该角色的权限分开?
我也在查看在org.springframework.security.core.userdetails.UserDetails身份验证提供程序引用的DAO中使用的接口,它使用了一个User(注意最后的GrantedAuthority):
public User(String username,
String password,
boolean enabled,
boolean accountNonExpired,
boolean credentialsNonExpired,
boolean accountNonLocked,
Collection<? extends GrantedAuthority> authorities)
Run Code Online (Sandbox Code Playgroud)
或者还有其他方法可以区分其他两个吗?或者它不受支持,我们必须自己制作?
我正在使用Spring MVC 3开发一个webapp,并且DispatcherServlet像'so'一样捕获所有请求(web.xml):
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
现在这可以像宣传的那样工作,但是我如何处理静态内容呢?以前,在使用RESTful URL之前,我会抓住所有*.html并将其发送给DispatcherServlet,但现在它是一个不同的球类游戏.
我有一个/ static /文件夹,其中包含/ styles /,/ js /,/ images/etc,我想从中排除/ static/*DispatcherServlet.
现在,当我这样做时,我可以获得静态资源:
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
但我希望它有很好的URL(我使用Spring MVC 3)而不是登陆页面www.domain.com/app/
我也不希望解决方案耦合到tomcat或任何其他servlet容器,并且因为这是(相对)低流量我不需要网络服务器(如apache httpd)infront.
有一个干净的解决方案吗?
我刚开始学习Spring.在下一步中,我想开发更大的Web应用程序.现在我想知道我是否应该从Spring Boot或Spring MVC开始.我已经阅读了一些东西,但它有点令人困惑,因为两者看起来都很相似.那么这两者有什么不同呢?
应用程序上下文和Web应用程序上下文有什么区别?
我知道WebApplicationContext用于面向Spring MVC架构的应用程序?
我想知道ApplicationContextMVC应用程序有什么用?什么样的豆类定义ApplicationContext?
在这张图片中(我从这里得到),HTTP请求向Dispatcher Servlet发送了一些内容.

我的问题是Dispatcher Servlet的作用是什么?
是否就像从网页上抛出信息并将其丢给控制器?
假设我有一个列出表中对象的页面,我需要放置一个表单来过滤表.过滤器作为Ajax GET发送到如下URL:http://foo.com/system/controller/action?page = 1&prop1 = x&prop2 = y&prop3 = z
而不是在我的控制器上有很多参数,如:
@RequestMapping(value = "/action")
public @ResponseBody List<MyObject> myAction(
@RequestParam(value = "page", required = false) int page,
@RequestParam(value = "prop1", required = false) String prop1,
@RequestParam(value = "prop2", required = false) String prop2,
@RequestParam(value = "prop3", required = false) String prop3) { ... }
Run Code Online (Sandbox Code Playgroud)
假设我有MyObject:
public class MyObject {
private String prop1;
private String prop2;
private String prop3;
//Getters and setters
...
}
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
@RequestMapping(value = "/action") …Run Code Online (Sandbox Code Playgroud)