小编Dav*_*rks的帖子

如何在Spring Security/SpringMVC中手动设置经过身份验证的用户

在新用户提交"新帐户"表单后,我想手动将该用户登录,这样他们就不必在后续页面上登录.

通过spring安全拦截器的普通表单登录页面工作得很好.

在新帐户形式的控制器中,我正在创建UsernamePasswordAuthenticationToken并手动在SecurityContext中设置它:

SecurityContextHolder.getContext().setAuthentication(authentication);
Run Code Online (Sandbox Code Playgroud)

在同一页面上,我稍后检查用户是否已登录:

SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Run Code Online (Sandbox Code Playgroud)

这将返回我之前在身份验证中设置的权限.一切都很好.

但是当我加载的下一页上调用相同的代码时,身份验证令牌就是UserAnonymous.

我不清楚为什么它没有保留我在上一个请求中设置的身份验证.有什么想法吗?

  • 是否与会话ID未正确设置有关?
  • 有什么东西可能会以某种方式覆盖我的身份验证吗?
  • 也许我只需要另一步来保存身份验证?
  • 或者我需要做些什么才能在整个会话中声明身份验证而不是单个请求?

只是寻找一些可能有助于我了解这里发生了什么的想法.

java authentication spring-mvc spring-security

102
推荐指数
5
解决办法
16万
查看次数

git rm - 致命:pathspec与任何文件都不匹配

我偶然在项目文件夹中添加了9000多张照片.并承诺他们.然后从磁盘中删除它们.承诺.

现在我尝试将更改推送到git服务器.但它需要太长时间并尝试发送12 Gb的数据.

我检查了磁盘上的文件大小,看到真正的.git文件夹需要12 Gb.

如何从那里删除照片?我试过了git rm,但失败了:

? git rm public/photos
fatal: pathspec 'public/photos' did not match any files
Run Code Online (Sandbox Code Playgroud)

因为我已经从磁盘上删除了它们,但它们仍然在.git文件夹中.

我试图添加public/photos.gitignore:

public/photos/
*.zip
Run Code Online (Sandbox Code Playgroud)

但没有结果.当然,我可以hard reset head在我的项目中没有这么多垃圾照片.但从那时起我多次承诺并在代码中做了很多改变.

git git-filter-branch

60
推荐指数
5
解决办法
10万
查看次数

Django:400错误的请求语法 - 这个消息是什么意思?

我正在使用django来构建一个简单的网站.当您键入基地址(现在是127.0.0.1:8000/)时,我使用django显示一个视图,该视图会执行一些检查并根据您的用户权限重定向您.(如果你有管理员权限,你去/admin,如果你不去/home,如果你没有登录,你去/login.)

当我发出HTTP请求时,我会被重定向,但我也会在django日志中看到以下两个错误:

  1. 代码400,消息错误的请求语法 ('\x16\x03\x01\x00\x95\x01\x00\x00\x91\x03\x01N\xaa\x9c\x08\x96\x7f\x92\xe9Z\x925\xcaY4\xa6\xa5\xab\xf2\x16\xfaT\x89\xe7\x8a\xc3\x99J)6\xfb\xc44\x00\x00H\xc0')
  2. "??N????Z?5?Y4?????T??ÙJ)6??4H?" 400 -

我将第一个中的十六进制翻译为(为了易读性添加了空格): SYN ETX NUL NUL U SOH NUL NUL Q ETX NUL N 170 156 X r 246 STX 141 214 ? 143 EOT FS j 142 223 s 241 220 < 185 \ \ m 242 &

我当然可以看到为什么服务器不喜欢这个请求,但我不知道它来自哪里.

有任何想法吗?

非常感谢.

==============

以下是视图的代码:

def index(request):
    user = request.user
    admin_courses = []

    if (user.is_authenticated()):
        u_id = user.getUserId()
        my_enrollment = Enrollment.objects.filter(user_id=u_id)
        admin_enrollment = my_enrollment.filter(type="ADMIN")
        for …
Run Code Online (Sandbox Code Playgroud)

django hex ascii http http-status-code-400

54
推荐指数
2
解决办法
4万
查看次数

MySQL对于alter table查询来说非常慢

为什么只需更新此表以添加列需要一个多小时?该表有15M行.它有2个索引和一个主键.ALTER TABLE查询现在处于"复制到tmp表"状态1小时15分钟.

ALTER TABLE `frugg`.`item_catalog_map` 
ADD COLUMN `conversion_url` TEXT NULL DEFAULT NULL
Run Code Online (Sandbox Code Playgroud)

表:

mysql> describe item_catalog_map;
+------------------------+---------------+------+-----+---------+-------+
| Field                  | Type          | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| catalog_unique_item_id | varchar(255)  | NO   | PRI | NULL    |       |
| catalog_id             | int(11)       | YES  | MUL | NULL    |       |
| item_id                | int(11)       | YES  | MUL | NULL    |       |
| price                  | decimal(10,2) | YES  |     | 0.00    |       |
+------------------------+---------------+------+-----+---------+-------+

mysql> …
Run Code Online (Sandbox Code Playgroud)

mysql sql alter-table

50
推荐指数
5
解决办法
6万
查看次数

在spring 3中使用<mvc:resources ... />会导致所有其他视图停止工作

最简单的例子:

我有一个调度程序servlet配置为捕获所有内容:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

我有一个简单的测试控制器:

@RequestMapping("/index")
@ResponseBody
public String rootTest(){
    return "Main page displayed from TestController";
}
Run Code Online (Sandbox Code Playgroud)

在这个测试用例中,我将以下行添加(或删除)dispatcher-servlet.xml:

<mvc:resources mapping="/public/**" location="/public/"/>
Run Code Online (Sandbox Code Playgroud)

我的崇高目标:提供静态内容(图像,css,js)以及我的动态内容(通过Jetty servlet容器中的Velocity生成,与全能的Spring捆绑在一起).

我的困境:当我添加时,<mvc:resources .../>我得到404 http://localhost/index,但我可以从http://localhost/public/img/42.png提供图片.如果我删除<mvc:resources .../>然后http://localhost/index工作正常,但当然,我如何提供静态内容?

奖金问题:为什么我从来没有吃过蛋糕呢?

java spring-mvc

46
推荐指数
1
解决办法
2万
查看次数

Spring/json:转换类似List <MyPojo>的类型集合

我正在尝试List<Pojo>通过Spring Rest模板封送列表:对象.

我可以传递简单的Pojo对象,但我找不到任何描述如何发送List<Pojo>对象的文档.

Spring正在使用Jackson JSON来实现HttpMessageConverter.杰克逊的文档涵盖了这一点:

除了绑定到POJO和"简单"类型之外,还有一个附加变体:绑定到通用(类型)容器的变体.这种情况需要特殊处理,因为所谓的类型擦除(Java用于以某种向后兼容的方式实现泛型),这会阻止您使用类似 Collection<String>.class(不能编译)的东西.

因此,如果要将数据绑定到a Map<String,User>,则需要使用:

Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() {});

其中TypeReference只需要通过通用类型定义(经由anynomous内部类在这种情况下):在重要的部分是 <Map<String,User>>限定类型结合.

这可以在Spring模板中完成吗?我瞥了一眼代码,它让我不是,但也许我只是不知道一些技巧.


由于下面的有用答案,最终解决方案是不发送List,而是发送一个简单扩展List的对象,例如:class PojoList extends ArrayList<Pojo>.Spring可以成功封送这个Object,它完成了与发送一样的东西List<Pojo>,尽管它不是一个简洁的解决方案.我还在春季发布了一个JIRA,以便他们在HttpMessageConverter界面中解决这个缺点.

java collections spring spring-mvc jackson

32
推荐指数
3
解决办法
3万
查看次数

在HTTP/S请求之上,有多少流量是网络开销

如果我们:
1)计算网络适配器级别的字节/位(通过NIC的原始位数),以及
2)所有HTTP/S请求/响应中的计数字节.

假设只有HTTP/S流量,并假设统计相关数量的"典型"网络流量:

我想知道,由于额外的网络开销,NIC级别的流量将比HTTP/S级别(计算http报头和所有级别)计算多少.

networking bandwidth web-traffic network-traffic

30
推荐指数
2
解决办法
4万
查看次数

要初始化瞬态字段,最简单的解决方案是什么

class MyClass implements Serializable {
  transient int myTransient;
  //Other variables
}
Run Code Online (Sandbox Code Playgroud)

当我恢复这个类时,我想myTransient手动初始化,但我只想使用默认序列化.

如何init()在不重写整个序列化机制的情况下将方法注入到对象恢复过程中,因为它似乎Externalizable会让我这样做?

java serialization

28
推荐指数
1
解决办法
1万
查看次数

了解Spring事务 - 当事务方法调用另一个事务方法时会发生什么?

只是为了理解Spring事务的工作原理,我想知道在下面的情况下会发生什么,其中一个方法被标记为@Transactional调用另一个标记为的方法@Transactional.

假设配置使用所有默认设置.

@Service("myService")
@Transactional
public MyService{
   public void myServiceMethod(){
      myDAO.getSomeDBObjects();
   }
}

@Repository("myDAO")
@Transactional
public MyDAOWithUsesBeyondMyService{
   public void getSomeDBObjects(){...}
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我要输入MyService.myServiceMethod()它,显然会启动一个交易.然后,钻进myDAO.getSomeDBObjects()会发生什么?交易已经存在的事实会导致没有新的交易产生,或者我在这里创建两个交易?

关于传播的文档(引用如下)似乎涵盖了这一点,但我想验证我的理解,这对于我的处女大脑来说有点多了解一下.

传播:通常,在事务范围内执行的所有代码都将在该事务中运行.但是,您可以选择在事务上下文已存在时执行事务方法时指定行为.例如,代码可以继续在现有事务中运行(常见情况); 或者可以暂停现有交易并创建新交易.Spring提供了EJB CMT中熟悉的所有事务传播选项.要了解Spring中事务传播的语义,请参见第10.5.7节"事务传播".

java spring transactions

27
推荐指数
1
解决办法
2万
查看次数

我为什么要学习和使用struts?

我是一名java开发人员,没有经验丰富,但我对大多数概念都很熟悉.

我最近使用Tomcat/JSP(~30个动态页面)构建了一个网站.我犯了新的错误,在JSP中包含大部分核心逻辑,使用合理化,它只是"一个简单的项目".

我学到了很多困难.因此,我现在使用servlet在谷歌应用引擎中重新构建应用程序,并计划使用Velocity使用模型 - 视图 - 控制器设计模式实现它.

我也在看Struts,但之前没有使用过这个框架.

有人能说服我为什么要将struts纳入这个项目吗?对于一两个人的中型项目,真的会给我买很多东西吗?

在有额外学习曲线的情况下,有一个明显的成本,它的好处是否会超过成本?或者Velocity的使用是否足以隔离逻辑?意见?

java jsp velocity struts2

24
推荐指数
3
解决办法
2万
查看次数